Home | History | Annotate | Line # | Download | only in dist
NEWS revision 1.20
      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 
     10                              GCC 14 Release Series
     11 
     12    May 23, 2025
     13 
     14    The GCC developers are pleased to announce the release of GCC 14.3.
     15 
     16    This release is a bug-fix release, containing fixes for regressions in
     17    GCC 14.2 relative to previous releases of GCC.
     18 
     19 Release History
     20 
     21    GCC 14.3
     22           May 23, 2025 ([1]changes, [2]documentation)
     23 
     24    GCC 14.2
     25           Aug 1, 2024 ([3]changes, [4]documentation)
     26 
     27    GCC 14.1
     28           May 7, 2024 ([5]changes, [6]documentation)
     29 
     30 References and Acknowledgements
     31 
     32    GCC used to stand for the GNU C Compiler, but since the compiler
     33    supports several other languages aside from C, it now stands for the
     34    GNU Compiler Collection.
     35 
     36    The GCC developers would like to thank the numerous people that have
     37    contributed new features, improvements, bug fixes, and other changes as
     38    well as test results to GCC. This [7]amazing group of volunteers is
     39    what makes GCC successful.
     40 
     41    For additional information about GCC please refer to the [8]GCC project
     42    web site or contact the [9]GCC development mailing list.
     43 
     44    To obtain GCC please use [10]our mirror sites or [11]our version
     45    control system.
     46 
     47 
     48     For questions related to the use of GCC, please consult these web
     49     pages and the [12]GCC manuals. If that fails, the
     50     [13]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
     51     web pages and the development of GCC are welcome on our developer
     52     list at [14]gcc (a] gcc.gnu.org. All of [15]our lists have public
     53     archives.
     54 
     55    Copyright (C) [16]Free Software Foundation, Inc. Verbatim copying and
     56    distribution of this entire article is permitted in any medium,
     57    provided this notice is preserved.
     58 
     59    These pages are [17]maintained by the GCC team. Last modified
     60    2025-05-23.
     61 
     62 References
     63 
     64    1. https://gcc.gnu.org/gcc-14/changes.html
     65    2. https://gcc.gnu.org/onlinedocs/14.3.0/
     66    3. https://gcc.gnu.org/gcc-14/changes.html
     67    4. https://gcc.gnu.org/onlinedocs/14.2.0/
     68    5. https://gcc.gnu.org/gcc-14/changes.html
     69    6. https://gcc.gnu.org/onlinedocs/14.1.0/
     70    7. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Contributors.html
     71    8. https://gcc.gnu.org/index.html
     72    9. mailto:gcc (a] gcc.gnu.org
     73   10. https://gcc.gnu.org/mirrors.html
     74   11. https://gcc.gnu.org/git.html
     75   12. https://gcc.gnu.org/onlinedocs/
     76   13. mailto:gcc-help (a] gcc.gnu.org
     77   14. mailto:gcc (a] gcc.gnu.org
     78   15. https://gcc.gnu.org/lists.html
     79   16. https://www.fsf.org/
     80   17. https://gcc.gnu.org/about.html
     81 ======================================================================
     82 http://gcc.gnu.org/gcc-14/changes.html
     83 
     84                              GCC 14 Release Series
     85                         Changes, New Features, and Fixes
     86 
     87    This page is a "brief" summary of some of the huge number of
     88    improvements in GCC 14. You may also want to check out our [1]Porting
     89    to GCC 14 page and the [2]full GCC documentation.
     90 
     91 Caveats
     92 
     93      * C: Support for the GCC extension, a structure containing a C99
     94        flexible array member, or a union containing such a structure, is
     95        not the last field of another structure, is deprecated. Refer to
     96        [3]Zero Length Arrays. Any code relying on this extension should be
     97        modified to ensure that C99 flexible array members only end up at
     98        the ends of structures. Please use the warning option
     99        [4]-Wflex-array-member-not-at-end to identify all such cases in the
    100        source code and modify them.
    101      * C: Certain warnings about are now errors, see [5]Porting to GCC 14
    102        for details.
    103      * [6]-fcf-protection=[full|branch|return|none|check] has been
    104        refactored. To override -fcf-protection with a more specific
    105        setting, add -fcf-protection=none followed by a specific
    106        -fcf-protection=xxx.
    107      * Support for the ia64*-*- target ports which have been unmaintained
    108        for quite a while has been declared obsolete in GCC 14. The next
    109        release of GCC will have their sources permanently removed.
    110      * Support for the nios2*-*- target ports has also been declared
    111        obsolete in GCC 14, and the sources will also be removed in the
    112        next release of GCC.
    113      * [7]-fanalyzer is still only suitable for analyzing C code. In
    114        particular, using it on C++ is unlikely to give meaningful output.
    115 
    116 [8]General Improvements
    117 
    118      * For offload-device code generated via OpenMP and OpenACC, the math
    119        and the Fortran runtime libraries will now automatically be linked,
    120        when the user or compiler links them on the host side. Thus, it is
    121        no longer required to explicitly pass -lm and/or -lgfortran to the
    122        offload-device linker using the [9]-foffload-options= flag.
    123      * New configure options: --enable-host-pie, to build the compiler
    124        executables as PIE; and --enable-host-bind-now, to link the
    125        compiler executables with -Wl,-z,now in order to enable additional
    126        hardening.
    127      * New option [10]-fhardened, an umbrella option that enables a set of
    128        hardening flags. The options it enables can be displayed using the
    129        --help=hardened option.
    130      * New option [11]-fharden-control-flow-redundancy, to verify, at the
    131        end of functions, that the visited basic blocks correspond to a
    132        legitimate execution path, so as to detect and prevent attacks that
    133        transfer control into the middle of functions.
    134      * New type attribute [12]hardbool, for C and Ada. Hardened booleans
    135        take user-specified representations for true and false, presumably
    136        with higher hamming distance than standard booleans, and get
    137        verified at every use, detecting memory corruption and some
    138        malicious attacks.
    139      * New type attribute [13]strub to control stack scrubbing properties
    140        of functions and variables. The stack frame used by functions
    141        marked with the attribute gets zeroed-out upon returning or
    142        exception escaping. Scalar variables marked with the attribute
    143        cause functions containing or accessing them to get stack scrubbing
    144        enabled implicitly.
    145      * New option [14]-finline-stringops, to force inline expansion of
    146        memcmp, memcpy, memmove and memset, even when that is not an
    147        optimization, to avoid relying on library implementations.
    148      * New option [15]-ftrampoline-impl=, to choose the placement of
    149        generated trampolines. The default remains the stack for almost all
    150        targets. To override the default, -ftrampoline-impl=heap can be
    151        passed on supported ABIs (x86_64 Darwin, x86_64 and aarch64 Linux).
    152      * New function attribute [16]null_terminated_string_arg(PARAM_IDX)
    153        for indicating parameters that are expected to be null-terminated
    154        strings.
    155      * The vectorizer now supports vectorizing loops which contain any
    156        number of early breaks. This means loops such as:
    157             int z[100], y[100], x[100];
    158             int foo (int n)
    159             {
    160               int res = 0;
    161               for (int i = 0; i < n; i++)
    162                 {
    163                    y[i] = x[i] * 2;
    164                    res += x[i] + y[i];
    165 
    166                    if (x[i] > 5)
    167                      break;
    168 
    169                    if (z[i] > 5)
    170                      break;
    171 
    172                 }
    173               return res;
    174             }
    175 
    176        can now be vectorized on a number of targets. In this first version
    177        any input data sources must either have a statically known size at
    178        compile time or the vectorizer must be able to determine based on
    179        auxiliary information that the accesses are aligned.
    180 
    181 [17]New Languages and Language specific improvements
    182 
    183      * [18]OpenMP
    184           + The [19]GNU Offloading and Multi Processing Runtime Library
    185             Manual has been updated and extended, improving especially the
    186             description of ICVs, memory allocation, environment variables
    187             and OpenMP routines.
    188           + The requires directive's unified_address requirement is now
    189             fulfilled by both AMD GCN and nvptx devices. AMD GCN and nvptx
    190             devices now support low-latency allocators as [20]detailed in
    191             the manual. Initial support for pinned-memory allocators has
    192             been added and, on Linux, [21]libnuma is now used for
    193             allocators requesting the nearest-partition trait (both is
    194             described in the [22]memory allocation section of the manual).
    195           + OpenMP 5.0: The allocate directive is now supported for stack
    196             variables in C and Fortran, including the OpenMP 5.1 align
    197             modifier. In C and C++ the map clause now accepts lvalue
    198             expressions. For Fortran, OpenMP allocators can now be used
    199             for allocatables and pointers using the allocate directive and
    200             its OpenMP 5.2 replacement, the allocators directive; files
    201             using this allocator and all files that might directly or
    202             indirectly (intrinsic assignment, intent(out), ...) de- or
    203             reallocate such-allocated variables must be compiled with the
    204             [23]-fopenmp-allocators option.
    205           + OpenMP 5.1: Support was added for collapsing imperfectly
    206             nested loops and using present as map-type modifier and in
    207             defaultmap. The indirect clause is now supported. The
    208             performance of copying strided data from or to nvptx and AMD
    209             GPU devices using the OpenMP 5.1 routine
    210             omp_target_memcpy_rect has been improved.
    211           + OpenMP 5.2: The OMP_TARGET_OFFLOAD=mandatory handling has been
    212             updated for the clarifications and changes of the 5.2
    213             specification. For Fortran, the list of directives permitted
    214             in Fortran pure procedures was extended. Additionally, the
    215             spec change has been implemented for default implicit mapping
    216             of C/C++ pointers pointing to unmapped storage. The destroy
    217             clause now optionally accepts the depend object as argument.
    218           + OpenMP 6.0 preview (TR11/TR12): The decl attribute is now
    219             supported in C++ 11 and the directive, sequence and decl
    220             attributes are now supported in C 23.
    221      * [24]OpenACC
    222           + OpenACC 2.7: The self clause was added to be used on compute
    223             constructs and the default clause for data constructs.
    224             Additionally, the readonly modifier is now handled in the
    225             copyin clause and cache directive.
    226           + OpenACC 3.2: The following API routines are now available in
    227             Fortran using the openacc module or the openacc_lib.h header
    228             file: acc_malloc, acc_free, acc_map_data, acc_unmap_data,
    229             acc_deviceptr, acc_hostptr, acc_memcpy_to_device,
    230             acc_memcpy_to_device_async, acc_memcpy_from_device, and
    231             acc_memcpy_from_device_async.
    232 
    233   [25]Ada
    234 
    235      * New implementation-defined aspects and pragmas:
    236           + [26]Local_Restrictions, which specifies that a particular
    237             subprogram does not violate one or more local restrictions,
    238             nor can it call a subprogram that is not subject to the same
    239             requirements.
    240           + [27]User_Aspect_Definition and [28]User_Aspect, which provide
    241             a mechanism for avoiding textual duplication if some set of
    242             aspect specifications is needed in multiple places.
    243      * New implementation-defined aspects and pragmas for verification of
    244        the SPARK 2014 subset of Ada:
    245           + [29]Always_Terminates, which provides a condition for a
    246             subprogram to necessarily complete (either return normally or
    247             raise an exception).
    248           + [30]Ghost_Predicate, which introduces a subtype predicate that
    249             can reference Ghost entities.
    250           + [31]Exceptional_Cases, which lists exceptions that might be
    251             propagated by the subprogram with side effects in the context
    252             of its precondition and associates them with a specific
    253             postcondition.
    254           + [32]Side_Effects, which indicates that a function should be
    255             handled like a procedure with respect to parameter modes,
    256             Global contract, exceptional contract and termination: it may
    257             have output parameters, write global variables, raise
    258             exceptions and not terminate.
    259      * The new attributes and contracts have been applied to the relevant
    260        parts of the Ada runtime library, which has been subsequently
    261        proven to be correct with SPARK 2014.
    262      * Support for the LoongArch architecture.
    263      * Support for vxWorks 7 Cert RTP has been removed.
    264      * Additional hardening improvements. For more information related to
    265        hardening options, refer to the [33]GCC Instrumentation Options and
    266        the [34]GNAT Reference Manual, Security and Hardening Features.
    267      * Improve style checking for redundant parentheses with [35]-gnatyz
    268      * New switch [36]-gnateH to force reverse Bit_Order threshold to 64.
    269      * Experimental features:
    270           + [37]Storage Model: this feature proposes to redesign the
    271             concepts of Storage Pools into a more efficient model allowing
    272             higher performance and easier integration with low footprint
    273             embedded runtimes.
    274           + [38]String Interpolation: allows for easier string formatting.
    275      * Further clean up and improvements to the GNAT code.
    276 
    277   [39]C family
    278 
    279      * The Clang language extensions __has_feature and __has_extension
    280        have been implemented in GCC. These are available from C, C++, and
    281        Objective-C(++). This is primarily intended to aid the portability
    282        of code written against Clang.
    283 
    284   [40]C
    285 
    286      * Some more C23 features have been implemented:
    287           + Bit-precise integer types (_BitInt (N) and unsigned _BitInt
    288             (N)): integer types with a specified number of bits. These are
    289             only supported on IA-32, x86-64 and AArch64 (little-endian) at
    290             present.
    291           + Structure, union and enumeration types may be defined more
    292             than once in the same scope with the same contents and the
    293             same tag; if such types are defined with the same contents and
    294             the same tag in different scopes, the types are compatible.
    295           + The <stdckdint.h> header for checked integer arithmetic.
    296      * In addition to those C23 features, there are new command-line
    297        options -std=c23, -std=gnu23 and -Wc11-c23-compat. These are
    298        equivalent to the previous options -std=c2x, -std=gnu2x and
    299        -Wc11-c2x-compat, which are deprecated but remain supported.
    300      * GCC supports a new pragma #pragma GCC novector to indicate to the
    301        vectorizer not to vectorize the loop annotated with the pragma.
    302 
    303   [41]C++
    304 
    305      * Several C++26 features have been implemented:
    306           + [42]P1854R4, Making non-encodable string literals ill-formed
    307             ([43]PR110341)
    308           + [44]P2752R3, Static storage for braced initializers
    309             ([45]PR110346)
    310           + [46]P2361R6, Unevaluated strings ([47]PR110342)
    311           + [48]P2738R1, constexpr cast from void* ([49]PR110344)
    312           + [50]P2741R3, User-generated static_assert messages
    313             ([51]PR110348)
    314           + [52]P2169R4, Placeholder variables with no name ([53]PR110349)
    315           + [54]P2864R2, Removing deprecated arithmetic conversion on
    316             enumerations
    317           + [55]P2748R5, Disallow binding a returned reference to a
    318             temporary ([56]PR114455)
    319           + [57]P2809R3, Trivial infinite loops are not undefined behavior
    320             ([58]PR114462)
    321      * Several C++23 features have been implemented:
    322           + [59]P0847R7, Deducing this ([60]PR102609)
    323           + [61]P2280R4, Using unknown references in constant expressions
    324             ([62]PR106650)
    325           + [63]P2564R3, consteval needs to propagate up ([64]PR107687)
    326           + [65]P2582R1, Class template argument deduction from inherited
    327             constructors ([66]PR106653)
    328      * Several C++ Defect Reports have been resolved, e.g.:
    329           + [67]DR 532, Member/nonmember operator template partial
    330             ordering
    331           + [68]DR 976, Deduction for const T& conversion operators
    332           + [69]DR 2262, Attributes for asm-definition
    333           + [70]DR 2359, Unintended copy initialization with designated
    334             initializers
    335           + [71]DR 2386, tuple_size requirements for structured binding
    336           + [72]DR 2406, [[fallthrough]] attribute and iteration
    337             statements
    338           + [73]DR 2543, constinit and optimized dynamic initialization
    339           + [74]DR 2586, Explicit object parameter for assignment and
    340             comparison
    341           + [75]DR 2735, List-initialization and conversions in overload
    342             resolution
    343           + [76]DR 2799, Inheriting default constructors
    344      * When a diagnostic occurs involving a C++ template, GCC will now
    345        quote the source code of the context at which the template is
    346        instantiated ("required from here"), rather than just print
    347        filename and line/column numbers.
    348      * New built-in __type_pack_element to speed up traits such as
    349        std::tuple_element ([77]PR100157)
    350      * goto can cross the initialization of a trivially initialized object
    351        with a non-trivial destructor ([78]DR 2256)
    352      * -Wdangling-reference false positives have been reduced. The warning
    353        does not warn about std::span-like classes; there is also a new
    354        attribute gnu::no_dangling to suppress the warning. See [79]the
    355        manual for more info.
    356      * noexcept(expr) is now mangled as per the Itanium ABI
    357      * the named return value optimization can now be performed even for
    358        variables declared in an inner block of a function, see the
    359        [80]test
    360      * New -Wnrvo warning, to warn if the named return value optimization
    361        is not performed although it is allowed by [class.copy.elision].
    362        See [81]the manual for more info.
    363      * The backing array for std::initializer_list has been made static,
    364        allowing combining multiple equivalent initializer-lists ([82]git)
    365      * New -Welaborated-enum-base warning, to warn if an additional
    366        enum-base is used in an elaborated-type-specifier
    367      * Better #include hints for missing headers ([83]PR110164)
    368      * The arguments of a variable template-id are coerced earlier than
    369        before, so various problems are detected earlier ([84]PR89442)
    370      * -Wmissing-field-initializers is no longer emitted for empty classes
    371        ([85]PR110064)
    372      * The constexpr code now tracks lifetimes in constant evaluation;
    373        this change helps to detect bugs such as accessing a variable whose
    374        lifetime has ended ([86]PR70331, [87]PR96630, [88]PR98675)
    375      * Array destruction can now be devirtualized
    376      * In-class member variable template partial specializations are now
    377        accepted ([89]PR71954)
    378      * Improved diagnostic for explicit conversion functions: when a
    379        conversion doesn't work out only because the conversion function
    380        necessary to do the conversion couldn't be used because it was
    381        marked explicit, explain that to the user ([90]git)
    382      * Corrected mangling of static/thread_local structured bindings at
    383        function/block scope ([91]PR111069)
    384      * [basic.scope.block]/2 violations are detected even in compound-stmt
    385        of function-try-block and for block-scope external variables
    386        ([92]PR52953)
    387      * Improved "not a constant expression" diagnostic when taking the
    388        address of a non-static constexpr variable ([93]PR91483)
    389      * Non-dependent simple assignments are checked even in templates
    390        ([94]PR18474)
    391      * Attributes hot and cold can be applied to classes as well. See
    392        [95]the manual for more info.
    393      * Function template constraints, as well as CTAD placeholders, are
    394        now mangled
    395      * Various decltype fixes: [96]PR79620, [97]PR79378, [98]PR83167,
    396        [99]PR96917
    397      * New option -fdiagnostics-all-candidates to note all candidates
    398        during overload resolution failure
    399      * -Walloc-size and -Wcalloc-transposed-args warnings are enabled for
    400        C++ as well
    401      * The DR 2237 code no longer gives an error, it emits a
    402        -Wtemplate-id-cdtor warning instead
    403      * GCC supports a new pragma #pragma GCC novector to indicate to the
    404        vectorizer not to vectorize the loop annotated with the pragma.
    405      * C++ module scanning for named modules is now available, based on
    406        the format described in [100]P1689R5, Format for describing
    407        dependencies of source files. The -fdeps-format=, -fdeps-file=, and
    408        -fdeps-target= flags may be used to generate dependency
    409        information. In GCC 14 p1689r5 is the only valid argument for
    410        -fdeps-format=.
    411 
    412     [101]Runtime Library (libstdc++)
    413 
    414      * The libstdc++exp.a library now includes all the Filesystem TS
    415        symbols from the libstdc++fs.a library. The experimental symbols
    416        for the C++23 std::stacktrace class are also in libstdc++exp.a,
    417        replacing the libstdc++_libbacktrace.a library that GCC 13
    418        provides. This means that -lstdc++exp is the only library needed
    419        for all experimental libstdc++ features.
    420      * Improved experimental support for C++20, including:
    421           + std::chrono::parse.
    422           + Unicode-aware string handling in std::format.
    423      * Improved experimental support for C++23, including:
    424           + The std::ranges::to function for converting ranges to
    425             containers.
    426           + The std::generator view for getting results from coroutines.
    427           + The <stacktrace> header is supported by default.
    428           + std::print and std::println (requires linking with -lstdc++exp
    429             on Windows).
    430           + Formatters for std::thread::id and std::stacktrace.
    431           + Smart pointer adaptors, std::out_ptr and std::inout_ptr.
    432           + Some range adaptors now support move-only types.
    433      * Experimental support for C++26, including:
    434           + Native handles for filebuf, fstream, etc.
    435           + Functions for saturation arithmetic on integers.
    436           + std::to_string now uses std::format.
    437           + Enhanced formatting of pointers with std::format.
    438           + The std::runtime_format function to allow using non-literal
    439             format strings with std::format.
    440           + Testable result types for <charconv> functions.
    441           + The std::text_encoding class for identifying character sets
    442             (requires linking with -lstdc++exp for some member functions).
    443      * Faster numeric conversions using std::to_string and
    444        std::to_wstring.
    445      * Updated parallel algorithms that are compatible with oneTBB.
    446      * std::numeric_limits<_Float32> and std::numeric_limits<_Float64> are
    447        now defined for all standard modes, not only for C++23.
    448      * Added missing functions for float and long double to <cmath>.
    449      * Using the std::setfill manipulator with std::istream is deprecated.
    450 
    451   [102]D
    452 
    453      * Support for the D programming language has been updated to version
    454        2.108.1 of the language and run-time library. Full changelog for
    455        this release and previous releases can be found on the
    456        [103]dlang.org website.
    457 
    458   [104]Fortran
    459 
    460      * The compiler now accepts the -std=f2023 option, which has been
    461        added in preparation of support of Fortran 2023. This option
    462        increases the line-length limit for source in free-form to 10000,
    463        and statements may have up to 1 million characters.
    464      * With the -save-temps option, preprocessed files with the .fii
    465        extension will be generated from free-form source files such as
    466        .F90 and .fi from fixed-form files such as .F.
    467 
    468   [105]Modula-2
    469 
    470      * The automatic dependency generation options: -M, -MD, -MF, -MMD,
    471        -MP, -MQ and -MT have been implemented in the compiler.
    472      * The -Wcase-enum and -Wuninit-variable-checking= options have been
    473        implemented to provide compile-time warnings against missing case
    474        clauses and uninitialized variables respectively.
    475 
    476   [106]Rust
    477 
    478      * Experimental support for the Rust programming language has been
    479        added. The compiler is incomplete, but already supports a subset of
    480        the Rust programming language. The frontend does not support
    481        compiling the Rust standard library, so it cannot be used for most
    482        real-world Rust code yet. However, you can experiment with the
    483        compiler to run Rust code on #[no_core] targets.
    484 
    485 [107]libgccjit
    486 
    487      * The libgccjit API gained 6 new entry points:
    488           + [108]gcc_jit_type_get_restrict for adding restrict to types
    489             ([109]LIBGCCJIT_ABI_25).
    490           + 4 functions for setting attributes on functions and variables
    491             ([110]LIBGCCJIT_ABI_26):
    492                o gcc_jit_function_add_attribute
    493                o gcc_jit_function_add_string_attribute
    494                o gcc_jit_function_add_integer_array_attribute
    495                o gcc_jit_lvalue_add_string_attribute
    496           + [111]gcc_jit_context_new_sizeof for accessing the size of a
    497             type ([112]LIBGCCJIT_ABI_27).
    498 
    499 [113]New Targets and Target Specific Improvements
    500 
    501   [114]AArch64
    502 
    503      * A number of new CPUs are supported through the -mcpu and -mtune
    504        options (GCC identifiers in parentheses).
    505           + Ampere-1B (ampere1b).
    506           + Arm Cortex-A520 (cortex-a520).
    507           + Arm Cortex-A720 (cortex-a720).
    508           + Arm Cortex-X4 (cortex-x4).
    509           + Microsoft Cobalt-100 (cobalt-100).
    510      * Additionally, the identifiers generic, generic-armv8-a and
    511        generic-armv9-a can be used to optimize code generation for a good
    512        blend of CPUs of a particular architecture version. These tunings
    513        are also used as the default optimization targets when compiling
    514        with the -march=armv8-a or -march=armv9-a options and their point
    515        releases e.g. -march=armv8.2-a or -march=armv9.3-a.
    516      * New features in the Arm architecture are supported in a number of
    517        ways:
    518           + Support is added for the Arm Streaming Matrix Extensions SME
    519             and SME2 through the +sme and +sme2 extensions to -march=. In
    520             particular, this includes support for the Beta state of the
    521             [115]SME ACLE in the form of a new intrinsics arm_sme.h
    522             intrinsics header and a number of new keyword attributes to
    523             manage use of the new Streaming SVE state. For more
    524             information please refer to the ACLE documentation.
    525           + Libatomic is updated to implement 128-bit atomic operations
    526             locklessly on systems with FEAT_LSE2.
    527           + Support for FEAT_LRCPC3 is added through ACLE intrinsics in
    528             arm_neon.h header and enabled through the +rcpc3 extension to
    529             -march=.
    530      * As well as numerous AArch64 code generation improvements, the
    531        following optimization enhancements are noteworthy:
    532           + A new AArch64-specific register allocation pass is added. It
    533             runs in addition to standard register allocation. The pass's
    534             main purpose is to make use of strided vector register
    535             operands in SME instructions. However, it can also remove
    536             redundant moves in normal Advanced SIMD and SVE code. The pass
    537             is controlled by the new option -mearly-ra= that takes the
    538             arguments all, strided, none. -mearly-ra=all is enabled by
    539             default at optimization levels -O2 and above.
    540           + A new optimization pass to fuse loads and stores to adjacent
    541             memory locations into load and store-pair AArch64
    542             instructions. The pass is enabled by default when compiling
    543             with optimization and runs twice in the optimization pipeline:
    544             before and after register allocation. This can be controlled
    545             with the options -mearly-ldp-fusion and -mlate-ldp-fusion.
    546      * Conformance with the ACLE specification is improved and a number of
    547        features aimed at helping developers deploy Arm architecture
    548        features are added:
    549           + Support for the Beta version of the [116]Function
    550             Multiversioning Specification. This feature provides
    551             facilities to annotate functions with attributes that allow
    552             the compiler to generate multiple versions of the function,
    553             selected at runtime based on the architecture features
    554             available in the system. Please refer to the ACLE
    555             specification for more details.
    556           + Support for more ACLE intrinsics in the arm_acle.h header,
    557             including the [117]Memory prefetch intrinsics and the
    558             [118]Special register intrinsics. This also includes
    559             intrinsics for the extension to 128-bit system registers,
    560             enabled through the +d128 extension to -march=.
    561           + Intrinsics enabled by the +dotprod, +fp16, +fp16fml, +i8mm,
    562             +sha3 and +sm4 extensions to -march= no longer require
    563             -march=armv8.2-a or higher to be specified. Likewise, the
    564             intrinsics enabled by +memtag no longer require
    565             -march=armv8.5-a.
    566           + Support for the [119]NEON-SVE Bridge intrinsics. These are
    567             intrinsics that allow conversions between NEON and SVE
    568             vectors, enabled through the inclusion of the
    569             arm_neon_sve_bridge.h header.
    570      * The option -mtp= is now supported for changing the TPIDR register
    571        used for TLS accesses. For more details please refer to the
    572        [120]documentation.
    573 
    574   [121]AMD Radeon (GCN)
    575 
    576      * Initial support for the AMD Radeon gfx90c (GCN5), gfx1030, gfx1036
    577        (RDNA2), gfx1100 and gfx1103 (RDNA3) devices has been added. LLVM
    578        15+ (assembler and linker) is [122]required to support GFX11.
    579      * Improved register usage and performance on CDNA Instinct MI100 and
    580        MI200 series devices.
    581      * The default device architecture is now gfx900 (Vega).
    582      * Fiji (gfx803) device support is now deprecated and will be removed
    583        from a future release. The default compiler configuration no longer
    584        uses Fiji as the default device, and no longer includes the Fiji
    585        libraries. Both can be restored by configuring with
    586        [123]--with-arch=fiji .
    587 
    588   [124]arm
    589 
    590      * The Cortex-M52 CPU is now supported through the cortex-m52 argument
    591        to the -mcpu and -mtune options.
    592 
    593   [125]AVR
    594 
    595      * On AVR64* and AVR128* devices, read-only data is now located in
    596        program memory per default and no longer in RAM.
    597           + Only a 32 KiB block of program memory can be used to store and
    598             access .rodata in that way. Which block is used can be
    599             selected by defining the symbol __flmap. As an alternative,
    600             the byte address of the block can be specified by the symbol
    601             __RODATA_FLASH_START__ which takes precedence over __flmap.
    602             For example, linking with
    603             -Wl,--defsym,__RODATA_FLASH_START__=32k chooses the second
    604             32 KiB block.
    605           + The default uses the last 32 KiB block, which is also the
    606             hardware default for bit-field NVMCTRL_CTRLB.FLMAP.
    607           + When a non-default block is used, then NVMCTRL_CTRLB.FLMAP
    608             must be initialized accordingly by hand, or AVR-LibC v2.2 that
    609             implements [126]#931 can be used. The latter initializes
    610             NVMCTRL_CTRLB.FLMAP in the startup code and according to the
    611             value of __flmap or __RODATA_FLASH_START__.
    612           + When AVR-LibC with #931 is used, then defining the symbol
    613             __flmap_lock to a non-zero value will set bit
    614             NVMCTRL_CTRLB.FLMAPLOCK. This will protect NVMCTRL_CTRLB.FLMAP
    615             from any further changes -- which would be Undefined Behaviour
    616             in C/C++. If you prefer to define the symbol in a C/C++ file,
    617             an asm statement can be used:
    618 __asm (".global __flmap_lock"  "\n\t"
    619        "__flmap_lock = 1");
    620           + When you do not want the code from #931, then define a global
    621             symbol __do_flmap_init and the linker will not pull in that
    622             code from libmcu.a any more.
    623           + In order to return to the old placement of read-only data in
    624             RAM, the new compiler option -mrodata-in-ram can be used. This
    625             is required on devices where the hardware revision is affected
    626             by a silicon bug concerning the FLMAP functionality.
    627           + Read-only data is located in output section .rodata, whereas
    628             it is part of .text when located in RAM.
    629           + The feature is only available when the compiler is configured
    630             with a version of Binutils that implements [127]PR31124, which
    631             is the case for Binutils v2.42 and up.
    632           + The implementation consists of two parts:
    633               1. Binutils supports new emulations avrxmega2_flmap and
    634                  avrxmega4_flmap. The sole purpose of these emulations is
    635                  to provide adjusted default linker description files.
    636                  Apart from that, these emulations behave exactly the same
    637                  like avrxmega2 resp. avrxmega4.
    638               2. The compiler uses a [128]device-specs file which links
    639                  the program with -mavrxmega2_flmap or -mavrxmega2
    640                  depending on -m[no-]rodata-in-ram; and similar for
    641                  -mavrxmega4[_flmap].
    642             This means the feature can be used with older compiler or
    643             Binutils versions; all what's needed is an adjusted linker
    644             script and a custom device-specs file.
    645      * A new compiler option -m[no-]rodata-in-ram has been added. The
    646        default is to locate read-only data in program memory for devices
    647        that support it, e.g. for AVR64* and AVR128* devices as explained
    648        above, and for devices from the [129]avrxmega3 and [130]avrtiny
    649        families.
    650      * The new built-in macro __AVR_RODATA_IN_RAM__ is supported on all
    651        devices. It's defined to 0 or 1.
    652      * A new optimization tries to improve code generation for indirect
    653        memory accesses on [131]Reduced Tiny devices. It can be controlled
    654        by the new compiler option -mfuse-add=level where level may be 0, 1
    655        or 2.
    656      * On the Reduced Tiny devices, the meaning of register constraint "w"
    657        has been changed. It now constrains the registers R24...R31 as is
    658        the case for all the other devices.
    659      * Support for the following devices has been added in v14.3:
    660           + AVR32SD20, AVR32SD28, AVR32SD32, AVR64SD28, AVR64SD32,
    661             AVR64SD48.
    662 
    663   [132]IA-32/x86-64
    664 
    665      * New compiler option -m[no-]evex512 was added. The compiler switch
    666        enables/disables 512-bit vector. It will be default on if AVX512F
    667        is enabled.
    668      * Part of new feature support for Intel APX was added, including
    669        EGPR, NDD, PPX and PUSH2POP2. APX support is available via the
    670        -mapxf compiler switch.
    671      * For inline asm support with APX, by default the EGPR feature was
    672        disabled to prevent potential illegal instruction with EGPR occurs.
    673        To invoke egpr usage in inline asm, use new compiler option
    674        -mapx-inline-asm-use-gpr32 and user should ensure the instruction
    675        supports EGPR.
    676      * New ISA extension support for Intel AVX10.1 was added. AVX10.1
    677        intrinsics are available via the -mavx10.1-256 compiler switch with
    678        256-bit vector support. 512-bit vector support for AVX10.1
    679        intrinsics are available via the -mavx10.1-512 compiler switch.
    680        -mavx10.1 enables AVX10.1 intrinsics with 256-bit vector support in
    681        GCC 14.1 and GCC 14.2. Since GCC 14.3, it enables AVX10.1
    682        intrinsics with 512-bit vector support (and emits a warning due to
    683        this behavior change).
    684      * New ISA extension support for Intel AVX-VNNI-INT16 was added.
    685        AVX-VNNI-INT16 intrinsics are available via the -mavxvnniint16
    686        compiler switch.
    687      * New ISA extension support for Intel SHA512 was added. SHA512
    688        intrinsics are available via the -msha512 compiler switch.
    689      * New ISA extension support for Intel SM3 was added. SM3 intrinsics
    690        are available via the -msm3 compiler switch.
    691      * New ISA extension support for Intel SM4 was added. SM4 intrinsics
    692        are available via the -msm4 compiler switch.
    693      * New ISA extension support for Intel USER_MSR was added. USER_MSR
    694        intrinsics are available via the -muser_msr compiler switch.
    695      * GCC now supports the Intel CPU named Clearwater Forest through
    696        -march=clearwaterforest. Based on Sierra Forest, the switch further
    697        enables the AVX-VNNI-INT16, PREFETCHI, SHA512, SM3, SM4 and
    698        USER_MSR ISA extensions.
    699      * GCC now supports the Intel CPU named Gracemont through
    700        -march=gracemont. Gracemont is based on Alder Lake.
    701      * GCC now supports the Intel CPU named Arrow Lake through
    702        -march=arrowlake. Based on Alder Lake, the switch further enables
    703        the AVX-IFMA, AVX-NE-CONVERT, AVX-VNNI-INT8 and CMPccXADD ISA
    704        extensions.
    705      * GCC now supports the Intel CPU named Arrow Lake S through
    706        -march=arrowlake-s. Based on Arrow Lake, the switch further enables
    707        the AVX-VNNI-INT16, SHA512, SM3 and SM4 ISA extensions.
    708      * GCC now supports the Intel CPU named Lunar Lake through
    709        -march=lunarlake. Lunar Lake is based on Arrow Lake S.
    710      * GCC now supports the Intel CPU named Panther Lake through
    711        -march=pantherlake. Based on Arrow Lake S, the switch further
    712        enables the PREFETCHI ISA extensions.
    713      * Xeon Phi CPUs support (a.k.a. Knight Landing and Knight Mill) are
    714        marked as deprecated. GCC will emit a warning when using the
    715        -mavx5124fmaps, -mavx5124vnniw, -mavx512er, -mavx512pf,
    716        -mprefetchwt1, -march=knl, -march=knm, -mtune=knl or -mtune=knm
    717        compiler switches. Support will be removed in GCC 15.
    718      * [133]Hardware-assisted AddressSanitizer now works for the x86-64
    719        target with LAM_U57. -fsanitize=hwaddress will enable -mlam=u57 by
    720        default.
    721      * GCC now supports AMD CPUs based on the znver5 core via
    722        -march=znver5. In addition to the ISA extensions enabled on a
    723        znver4 core, this switch further enables the AVX512VP2INTERSECT,
    724        AVXVNNI, MOVDIR64B, MOVDIRI, and PREFETCHI ISA extensions.
    725      * The _Float16 and __bf16 type are supported independent of SSE2. W/o
    726        SSE2, these types are storage-only, compiler will issue an error
    727        when they're used in conversion, unary operation, binary operation,
    728        parameter passing or value return. Please use __SSE2__ to detect
    729        arithmetic support of these types instead of __FLT16_MAX__(or other
    730        similar Macros).
    731 
    732   [134]MCore
    733 
    734      * Bitfields are now signed by default per GCC policy. If you need
    735        bitfields to be unsigned, use -funsigned-bitfields.
    736 
    737   [135]LoongArch
    738 
    739      * Support for the following [136]-march parameters has been added:
    740           + la64v1.0
    741           + la64v1.1
    742           + la664
    743        It is now recommended to use -march=la64v1.0 as the only compiler
    744        option to describe the target ISA when building binaries for
    745        distribution. For more information on LoongArch ISA versions, see
    746        [137]Toolchain Conventions of the LoongArch(TM) Architecture.
    747      * Support for the following [138]-mtune parameters has been added:
    748           + generic
    749           + la664
    750      * New ISA Extension
    751           + LSX (Loongson SIMD Extension): Support 128-bit vector
    752             instructions and the intrinsics.
    753           + LASX (Loongson Advanced SIMD Extension): Support 256-bit
    754             vector instructions and the intrinsics.
    755           + FRECIPE: Support frecipe.{s/d} and frsqrte.{s/d} instructions
    756             and the intrinsics.
    757           + DIV32: Support div.w[u] and mod.w[u] instructions with inputs
    758             not sign-extended.
    759           + LAM_BH: Support am{swap/add}[_db].{b/h} instructions.
    760           + LAMCAS: Support amcas[_db].{b/h/w/d} instructions.
    761      * New Built-in Macros
    762           + __loongarch_arch: Target ISA preset as specified by -march=.
    763             For example, compiling with -march=la64v1.0, the value of
    764             __loongarch_arch is "la64v1.0".
    765           + __loongarch_tune: Processor model as specified by -mtune or
    766             its default value.
    767           + __loongarch_{simd,sx,asx}: These macros are not defined, or
    768             defined as 1.
    769           + __loongarch_simd_width: The maximum SIMD bit-width enabled by
    770             the compiler. (128 for lsx, and 256 for lasx).
    771           + __loongarch_frecipe: It's defined to 1 or undefined.
    772           + __loongarch_div32: It's defined to 1 or undefined.
    773           + __loongarch_lam_bh: It's defined to 1 or undefined.
    774           + __loongarch_lamcas: It's defined to 1 or undefined.
    775           + __loongarch_ld_seq_sa: It's defined to 1 or undefined.
    776           + __loongarch_version_major: The minimally required LoongArch
    777             ISA version (major) to run the compiled program, defined to 1
    778             or undefined (iff no such version is known to the compiler).
    779           + __loongarch_version_minor: The minimally required LoongArch
    780             ISA version (minor) to run the compiled program, defined to 0
    781             1 or undefined (iff __loongarch_version_major is undefined).
    782           + __FLOAT128_TYPE: It's defined to 1.
    783      * New Intrinsics
    784           + [139]__builtin_thread_pointer
    785           + [140]__lsx_*
    786           + [141]__lasx_*
    787           + [142]__frecipe_{s/d} and __frsqrte_{s/d}
    788      * New Compiler Option
    789           + [143]-m[no-]lsx
    790           + [144]-m[no-]lasx
    791           + [145]-m[no-]frecipe
    792           + [146]-m[no-]div32
    793           + [147]-m[no-]lam-bh
    794           + [148]-m[no-]lamcas
    795           + [149]-m[no-]ld-seq-sa
    796           + [150]-mrecip=
    797           + [151]-m[no-]recip
    798           + [152]-mexplicit-relocs={none,always,auto}
    799           + [153]-m[no-]relax
    800           + [154]-m[no-]pass-mrelax-to-as
    801           + [155]-mtls-dialect={trad,desc}
    802      * Support for Ada and D.
    803      * Support for libffi.
    804      * Enable -free by default at -O2 or higher.
    805      * Enable -fsched-pressure by default at -O1 or higher.
    806      * Support the extreme code model using macro instructions (under
    807        -mno-explicit-relocs).
    808      * Support call36.
    809      * Optimizing built-in functions for memory-model-aware atomic
    810        operations using hierarchical dbar instructions.
    811      * TLS descriptors support. It is not enabled by default, and can be
    812        enabled with [156]-mtls-dialect=desc. The default behavior can be
    813        configured with --with-tls=[trad|desc].
    814 
    815   [157]RISC-V
    816 
    817      * The SLP and loop vectorizer are now enabled for RISC-V when the
    818        vector extension is enabled, thanks to Ju-Zhe Zhong from
    819        [158]RiVAI, Pan Li from [159]Intel, and Robin Dapp from
    820        [160]Ventana Micro for contributing most of the implementation!
    821      * The -mrvv-max-lmul= option has been introduced for performance
    822        tuning of the loop vectorizer. The default value is
    823        -mrvv-max-lmul=m1, which limits the maximum LMUL to 1. The
    824        -mrvv-max-lmul=dynamic setting can dynamically select the maximum
    825        LMUL value based on register pressure.
    826      * Atomic code generation has been improved and is now in conformance
    827        with the latest psABI specification, thanks to Patrick O'Neill from
    828        [161]Rivos.
    829      * Support for the vector intrinsics as specified in [162]version 1.0
    830        of the RISC-V vector intrinsic specification.
    831      * Support for the experimental vector crypto intrinsics as specified
    832        in [163]RISC-V vector intrinsic specification, thanks to Feng Wang
    833        et al. from [164]ESWIN Computing
    834      * Support for the T-head vector intrinsics.
    835      * Support for the scalar bitmanip and scalar crypto intrinsics,
    836        thanks to Liao Shihua from [165]PLCT.
    837      * Support for the large code model via option -mcmodel=large, thanks
    838        to Kuan-Lin Chen from [166]Andes Technology.
    839      * Support for the standard vector calling convention variant, thanks
    840        to Lehua Ding from [167]RiVAI.
    841      * Supports the target attribute, which allows users to compile a
    842        function with specific extensions.
    843      * -march= option no longer requires the architecture string to be in
    844        canonical order, with only a few constraints remaining: the
    845        architecture string must start with rv[32|64][i|g|e], and must use
    846        an underscore as the separator after a multi-letter extension.
    847      * -march=help option has been introduced to dump all supported
    848        extensions.
    849      * Added experimental support for the -mrvv-vector-bits=zvl option and
    850        the riscv_rvv_vector_bits attribute, which specify a fixed length
    851        for scalable vector types. This option is optimized for specific
    852        vector core implementations; however, the code generated with this
    853        option is NOT portable between the core with different VLEN, thanks
    854        to Pan Li from [168]Intel.
    855      * Support for TLS descriptors has been introduced, which can be
    856        enabled by the -mtls-dialect=desc option. The default behavior can
    857        be configured with --with-tls=[trad|desc].
    858      * Support for the TLS descriptors, this can be enabled by
    859        -mtls-dialect=desc and the default behavior can be configure by
    860        --with-tls=[trad|desc], and this feature require glibc 2.40, thanks
    861        to Tatsuyuki Ishi from [169]Blue Whale Systems.
    862      * Support for the following standard extensions has been added:
    863           + Vector crypto extensions:
    864                o Zvbb
    865                o Zvkb
    866                o Zvbc
    867                o Zvkg
    868                o Zvkned
    869                o Zvkhna
    870                o Zvkhnb
    871                o Zvksed
    872                o Zvksh
    873                o Zvkn
    874                o Zvknc
    875                o Zvkng
    876                o Zvks
    877                o Zvksc
    878                o Zvksg
    879                o Zvkt
    880           + Code size reduction extensions:
    881                o Zca
    882                o Zcb
    883                o Zce
    884                o Zcf
    885                o Zcd
    886                o Zcmp
    887                o Zcmt
    888           + Zicond
    889           + Zfa
    890           + Ztso
    891           + Zvfbfmin
    892           + Zvfhmin
    893           + Zvfh
    894           + Za64rs
    895           + Za128rs
    896           + Ziccif
    897           + Ziccrse
    898           + Ziccamoa
    899           + Zicclsm
    900           + Zic64b
    901           + Smaia
    902           + Smepmp
    903           + Smstateen
    904           + Ssaia
    905           + Sscofpmf
    906           + Ssstateen
    907           + Sstc
    908           + Svinval
    909           + Svnapot
    910           + Svpbmt
    911      * Support for the following vendor extensions has been added:
    912           + T-Head:
    913                o XTheadVector
    914           + CORE-V:
    915                o XCVmac
    916                o XCValu
    917                o XCVelw
    918                o XCVsimd
    919                o XCVbi
    920           + Ventana Micro:
    921                o XVentanaCondops
    922      * The following new CPUs are supported through the -mcpu option (GCC
    923        identifiers in parentheses).
    924           + SiFive's X280 (sifive-x280).
    925           + SiFive's P450 (sifive-p450).
    926           + SiFive's P670 (sifive-p670).
    927      * The following new CPUs are supported through the -mtune option (GCC
    928        identifiers in parentheses).
    929           + Generic out-of-order core (generic-ooo).
    930           + SiFive's P400 series (sifive-p400-series).
    931           + SiFive's P600 series (sifive-p600-series).
    932           + XiangShan's Nanhu microarchitecture (xiangshan-nanhu).
    933 
    934   [170]SPARC
    935 
    936      * The implementation of calling conventions for small structures
    937        containing arrays of floating-point components has been changed in
    938        64-bit mode for the Solaris port to match the implementation of the
    939        vendor compiler (and the ABI). As a result, the code generated will
    940        not be binary compatible with earlier releases in these cases.
    941 
    942 Documentation improvements
    943 
    944      * GCC's ability to provide clickable hyperlinks to the documentation
    945        has been extended, so that whenever GCC refers to a command-line
    946        option in quotes in a diagnostic message, the option is a clickable
    947        hyperlink (assuming a suitably capable terminal).
    948 
    949 [171]Improvements to Static Analyzer
    950 
    951      * New warnings:
    952           + [172]-Wanalyzer-infinite-loop warns about paths through the
    953             code which appear to lead to an infinite loop.
    954           + [173]-Wanalyzer-overlapping-buffers warns for paths through
    955             the code in which overlapping buffers are passed to an API for
    956             which the behavior on such buffers is undefined.
    957           + [174]-Wanalyzer-undefined-behavior-strtok warns for paths
    958             through the code in which a call is made to strtok with
    959             undefined behavior.
    960      * Previously, the analyzer's "taint" tracking to be explicitly
    961        enabled via [175]-fanalyzer-checker=taint (along with
    962        [176]-fanalyzer). This is now enabled by default when
    963        [177]-fanalyzer is selected, thus also enabling the 6 taint-based
    964        warnings:
    965           + [178]-Wanalyzer-tainted-allocation-size
    966           + [179]-Wanalyzer-tainted-array-index
    967           + [180]-Wanalyzer-tainted-assertion
    968           + [181]-Wanalyzer-tainted-divisor
    969           + [182]-Wanalyzer-tainted-offset
    970           + [183]-Wanalyzer-tainted-size
    971      * The analyzer will now simulate API calls that expect
    972        null-terminated string arguments, and will warn about code paths in
    973        which such a call is made with a buffer that isn't properly
    974        terminated, either due to a read of an uninitialized byte or an
    975        out-of-range accesses seen before any zero byte is seen. This
    976        applies to functions that use the new
    977        [184]null_terminated_string_arg(PARAM_IDX) attribute, functions
    978        that use the [185]format attribute, and to the library functions
    979        error (parameter 3), error_at_line (parameter 5), putenv, strchr
    980        (parameter 1), and strcpy (parameter 2).
    981      * The analyzer now makes use of the function attribute
    982        [186]alloc_size allowing [187]-fanalyzer to emit
    983        [188]-Wanalyzer-allocation-size, [189]-Wanalyzer-out-of-bounds, and
    984        [190]-Wanalyzer-tainted-allocation-size on execution paths
    985        involving allocations using such functions.
    986      * The analyzer's knowledge about the behavior of the standard library
    987        has been extended to cover fopen, strcat, strncpy, and strstr. The
    988        analyzer will also more precisely model the behavior of memcpy,
    989        memmove, strcpy, strdup, strlen, and of various atomic built-in
    990        functions.
    991      * The warning [191]-Wanalyzer-out-of-bounds has been extended so
    992        that, where possible, it will emit a text-based diagram visualizing
    993        the spatial relationship between
    994          1. the memory region that the analyzer predicts would be
    995             accessed, versus
    996          2. the range of memory that is valid to access
    997        whether they overlap, are touching, are close or far apart; which
    998        one is before or after in memory, the relative sizes involved, the
    999        direction of the access (read vs write), and, in some cases, the
   1000        values of data involved.
   1001        Such "text art" diagrams can be controlled (or suppressed) via a
   1002        new [192]-fdiagnostics-text-art-charset= option.
   1003        For example, given the out-of-bounds write in strcat in:
   1004 void test (void)
   1005 {
   1006    char buf[10];
   1007    strcpy (buf, "hello");
   1008    strcat (buf, " world!");
   1009 }
   1010 
   1011        it emits:
   1012                                  +----+----+----+----+----++-----+-----+-----+
   1013                                  |[0] |[1] |[2] |[3] |[4] || [5] | [6] | [7] |
   1014                                  +----+----+----+----+----++-----+-----+-----+
   1015                                  |' ' |'w' |'o' |'r' |'l' || 'd' | '!' | NUL |
   1016                                  +----+----+----+----+----++-----+-----+-----+
   1017                                  |     string literal (type: 'char[8]')      |
   1018                                  +-------------------------------------------+
   1019                                    |    |    |    |    |      |     |     |
   1020                                    |    |    |    |    |      |     |     |
   1021                                    v    v    v    v    v      v     v     v
   1022       +-----+--------------------+----+--------------+----++-----------------+
   1023       | [0] |        ...         |[5] |     ...      |[9] ||                 |
   1024       +-----+----+----+----+----++----+--------------+----+|                 |
   1025       | 'h' |'e' |'l' |'l' |'o' ||NUL |                    |after valid range|
   1026       +-----+----+----+----+----++----+-------------------+|                 |
   1027       |             'buf' (type: 'char[10]')              ||                 |
   1028       +---------------------------------------------------++-----------------+
   1029       +-------------------------+-------------------------++--------+--------+
   1030                                 |                                   |
   1031                       ---------+--------                ---------+---------
   1032                       |capacity: 10 bytes|                |overflow of 3 bytes|
   1033                       ------------------                -------------------
   1034 
   1035        showing that the overflow occurs partway through the second string
   1036        fragment.
   1037      * The analyzer will now attempt to track execution paths involving
   1038        computed gotos, whereas previously it gave up on such paths.
   1039 
   1040 [193]Improvements to SARIF support
   1041 
   1042      * The SARIF output from [194]-fdiagnostics-format= now adds
   1043        indentation and newlines to reflect the logical JSON structure of
   1044        the data. The previous compact behavior can be restored via the new
   1045        option [195]-fno-diagnostics-json-formatting. This also applies to
   1046        the older output format named "json".
   1047      * If profiling information about the compiler itself is requested via
   1048        [196]-ftime-report, and a SARIF output format is requested via
   1049        [197]-fdiagnostics-format=, then the timing and memory usage data
   1050        is now written in JSON form into the SARIF output, rather than as
   1051        plain text to stderr.
   1052 
   1053 [198]Improvements for plugin authors
   1054 
   1055      * GCC diagnostics have been able to have execution paths associated
   1056        with them since GCC 10, but previously these were required to be
   1057        single-threaded. As of GCC 14, these execution paths can have
   1058        multiple named threads associated with them, with each event being
   1059        associated with one of the threads. No existing GCC diagnostics
   1060        take advantage of this, but GCC plugins may find this useful for
   1061        their own diagnostics; an [199]example is provided in the
   1062        testsuite.
   1063      * GCC's diagnostics can now optionally add per-diagnostic property
   1064        bags to the SARIF output, allowing plugins to capture custom data
   1065        as needed with their diagnostics.
   1066 
   1067 [200]GCC 14.1
   1068 
   1069    This is the [201]list of problem reports (PRs) from GCC's bug tracking
   1070    system that are known to be fixed in the 14.1 release. This list might
   1071    not be complete (that is, it is possible that some PRs that have been
   1072    fixed are not listed here).
   1073 
   1074 [202]GCC 14.2
   1075 
   1076    This is the [203]list of problem reports (PRs) from GCC's bug tracking
   1077    system that are known to be fixed in the 14.2 release. This list might
   1078    not be complete (that is, it is possible that some PRs that have been
   1079    fixed are not listed here).
   1080 
   1081 [204]GCC 14.3
   1082 
   1083    This is the [205]list of problem reports (PRs) from GCC's bug tracking
   1084    system that are known to be fixed in the 14.3 release. This list might
   1085    not be complete (that is, it is possible that some PRs that have been
   1086    fixed are not listed here).
   1087 
   1088 
   1089     For questions related to the use of GCC, please consult these web
   1090     pages and the [206]GCC manuals. If that fails, the
   1091     [207]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   1092     web pages and the development of GCC are welcome on our developer
   1093     list at [208]gcc (a] gcc.gnu.org. All of [209]our lists have public
   1094     archives.
   1095 
   1096    Copyright (C) [210]Free Software Foundation, Inc. Verbatim copying and
   1097    distribution of this entire article is permitted in any medium,
   1098    provided this notice is preserved.
   1099 
   1100    These pages are [211]maintained by the GCC team. Last modified
   1101    2025-05-23.
   1102 
   1103 References
   1104 
   1105    1. https://gcc.gnu.org/gcc-14/porting_to.html
   1106    2. https://gcc.gnu.org/onlinedocs/index.html#current
   1107    3. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Zero-Length.html
   1108    4. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Warning-Options.html#index-Wflex-array-member-not-at-end
   1109    5. https://gcc.gnu.org/gcc-14/porting_to.html#warnings-as-errors
   1110    6. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Instrumentation-Options.html
   1111    7. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Static-Analyzer-Options.html
   1112    8. https://gcc.gnu.org/gcc-14/changes.html#general
   1113    9. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/C-Dialect-Options.html#index-foffload-options
   1114   10. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Instrumentation-Options.html#index-fhardened
   1115   11. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Instrumentation-Options.html#index-fharden-control-flow-redundancy
   1116   12. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Common-Type-Attributes.html#index-hardbool-type-attribute
   1117   13. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Common-Type-Attributes.html#index-strub-type-attribute
   1118   14. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Optimize-Options.html#index-finline-stringops
   1119   15. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Code-Gen-Options.html#index-ftrampoline-impl
   1120   16. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Common-Function-Attributes.html#index-null_005fterminated_005fstring_005farg-function-attribute
   1121   17. https://gcc.gnu.org/gcc-14/changes.html#languages
   1122   18. https://gcc.gnu.org/projects/gomp/
   1123   19. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/libgomp/
   1124   20. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/libgomp/Offload-Target-Specifics.html
   1125   21. https://github.com/numactl/numactl
   1126   22. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/libgomp/Memory-allocation.html
   1127   23. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gfortran/Fortran-Dialect-Options.html#index-fopenmp-allocators
   1128   24. https://gcc.gnu.org/wiki/OpenACC
   1129   25. https://gcc.gnu.org/gcc-14/changes.html#ada
   1130   26. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gnat_rm/Aspect-Local_005fRestrictions.html
   1131   27. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gnat_rm/Pragma-User_005fAspect_005fDefinition.html
   1132   28. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gnat_rm/Aspect-User_005fAspect.html
   1133   29. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gnat_rm/Aspect-Always_005fTerminates.html
   1134   30. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gnat_rm/Aspect-Ghost_005fPredicate.html
   1135   31. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gnat_rm/Aspect-Exceptional_005fCases.html
   1136   32. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gnat_rm/Aspect-Side_005fEffects.html
   1137   33. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Instrumentation-Options.html#index-fharden-compares
   1138   34. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gnat_rm/Security-Hardening-Features.html
   1139   35. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gnat_ugn/Style-Checking.html#index--gnatyz-_0028gcc_0029
   1140   36. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gnat_ugn/Alphabetical-List-of-All-Switches.html#index--gnateH-_0028gcc_0029
   1141   37. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gnat_rm/Pragma-Storage_005fModel.html
   1142   38. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gnat_rm/String-interpolation.html
   1143   39. https://gcc.gnu.org/gcc-14/changes.html#c-family
   1144   40. https://gcc.gnu.org/gcc-14/changes.html#c
   1145   41. https://gcc.gnu.org/gcc-14/changes.html#cxx
   1146   42. https://wg21.link/P1854R4
   1147   43. https://gcc.gnu.org/PR110341
   1148   44. https://wg21.link/P2752R3
   1149   45. https://gcc.gnu.org/PR110346
   1150   46. https://wg21.link/P2361R6
   1151   47. https://gcc.gnu.org/PR110342
   1152   48. https://wg21.link/P2738R1
   1153   49. https://gcc.gnu.org/PR110344
   1154   50. https://wg21.link/P2741R3
   1155   51. https://gcc.gnu.org/PR110348
   1156   52. https://wg21.link/P2169R4
   1157   53. https://gcc.gnu.org/PR110349
   1158   54. https://wg21.link/P2864R2
   1159   55. https://wg21.link/P2748R5
   1160   56. https://gcc.gnu.org/PR114455
   1161   57. https://wg21.link/P2809R3
   1162   58. https://gcc.gnu.org/PR114462
   1163   59. https://wg21.link/P0847R7
   1164   60. https://gcc.gnu.org/PR102609
   1165   61. https://wg21.link/P2280R4
   1166   62. https://gcc.gnu.org/PR106650
   1167   63. https://wg21.link/P2564R3
   1168   64. https://gcc.gnu.org/PR107687
   1169   65. https://wg21.link/P2582R1
   1170   66. https://gcc.gnu.org/PR106653
   1171   67. https://wg21.link/cwg532
   1172   68. https://wg21.link/cwg976
   1173   69. https://wg21.link/cwg2262
   1174   70. https://wg21.link/cwg2359
   1175   71. https://wg21.link/cwg2386
   1176   72. https://wg21.link/cwg2406
   1177   73. https://wg21.link/cwg2543
   1178   74. https://wg21.link/cwg2586
   1179   75. https://wg21.link/cwg2735
   1180   76. https://wg21.link/cwg2799
   1181   77. https://gcc.gnu.org/PR100157
   1182   78. https://cplusplus.github.io/CWG/issues/2256.html
   1183   79. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wdangling-reference
   1184   80. https://gcc.gnu.org/git/?p=gcc.git;a=blob;f=gcc/testsuite/g%2B%2B.dg/opt/nrv23.C;h=9e1253cd830a84ad4de5ff3076a07c543afe344f;hb=7e0b65b239c3a0d68ce94896b236b03de666ffd6
   1185   81. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Warning-Options.html#index-Wnrvo
   1186   82. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=4d935f52b0d5c00fcc154461b87415ebd8791a94
   1187   83. https://gcc.gnu.org/PR110164
   1188   84. https://gcc.gnu.org/PR89442
   1189   85. https://gcc.gnu.org/PR110064
   1190   86. https://gcc.gnu.org/PR70331
   1191   87. https://gcc.gnu.org/PR96630
   1192   88. https://gcc.gnu.org/PR98675
   1193   89. https://gcc.gnu.org/PR71954
   1194   90. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=85ad41a494e31311f8a6b2dbe930a128c5e85840
   1195   91. https://gcc.gnu.org/PR111069
   1196   92. https://gcc.gnu.org/PR52953
   1197   93. https://gcc.gnu.org/PR91483
   1198   94. https://gcc.gnu.org/PR18474
   1199   95. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/C_002b_002b-Attributes.html#index-cold-type-attribute
   1200   96. https://gcc.gnu.org/PR79620
   1201   97. https://gcc.gnu.org/PR79378
   1202   98. https://gcc.gnu.org/PR83167
   1203   99. https://gcc.gnu.org/PR96917
   1204  100. https://wg21.link/P1689R5
   1205  101. https://gcc.gnu.org/gcc-14/changes.html#libstdcxx
   1206  102. https://gcc.gnu.org/gcc-14/changes.html#d
   1207  103. https://dlang.org/changelog/2.108.1.html
   1208  104. https://gcc.gnu.org/gcc-14/changes.html#fortran
   1209  105. https://gcc.gnu.org/gcc-14/changes.html#modula2
   1210  106. https://gcc.gnu.org/gcc-14/changes.html#rust
   1211  107. https://gcc.gnu.org/gcc-14/changes.html#jit
   1212  108. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/jit/topics/types.html#c.gcc_jit_type_get_restrict
   1213  109. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/jit/topics/compatibility.html#libgccjit-abi-25
   1214  110. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/jit/topics/compatibility.html#libgccjit-abi-26
   1215  111. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/jit/topics/expressions.html#c.gcc_jit_context_new_sizeof
   1216  112. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/jit/topics/compatibility.html#libgccjit-abi-27
   1217  113. https://gcc.gnu.org/gcc-14/changes.html#targets
   1218  114. https://gcc.gnu.org/gcc-14/changes.html#aarch64
   1219  115. https://github.com/ARM-software/acle/blob/main/main/acle.md#sme-language-extensions-and-intrinsics
   1220  116. https://github.com/ARM-software/acle/blob/main/main/acle.md#function-multi-versioning
   1221  117. https://github.com/ARM-software/acle/blob/main/main/acle.md#memory-prefetch-intrinsics
   1222  118. https://github.com/ARM-software/acle/blob/main/main/acle.md#special-register-intrinsics
   1223  119. https://github.com/ARM-software/acle/blob/main/main/acle.md#neon-sve-bridge
   1224  120. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/AArch64-Options.html
   1225  121. https://gcc.gnu.org/gcc-14/changes.html#amdgcn
   1226  122. https://gcc.gnu.org/install/specific.html#amdgcn-x-amdhsa
   1227  123. https://gcc.gnu.org/install/specific.html#amdgcn-x-amdhsa
   1228  124. https://gcc.gnu.org/gcc-14/changes.html#arm
   1229  125. https://gcc.gnu.org/gcc-14/changes.html#avr
   1230  126. https://github.com/avrdudes/avr-libc/issues/931
   1231  127. https://sourceware.org/PR31124
   1232  128. https://gcc.gnu.org/wiki/avr-gcc#spec-files
   1233  129. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/AVR-Options.html#avrxmega3
   1234  130. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/AVR-Options.html#avrtiny
   1235  131. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/AVR-Options.html#avrtiny
   1236  132. https://gcc.gnu.org/gcc-14/changes.html#x86
   1237  133. https://gcc.gnu.org/gcc-11/changes.html
   1238  134. https://gcc.gnu.org/gcc-14/changes.html#mcore
   1239  135. https://gcc.gnu.org/gcc-14/changes.html#loongarch
   1240  136. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Options.html#index-march-7
   1241  137. https://github.com/loongson/la-toolchain-conventions/
   1242  138. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Options.html#index-mtune-8
   1243  139. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Base-Built-in-Functions.html
   1244  140. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-SX-Vector-Intrinsics.html
   1245  141. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-ASX-Vector-Intrinsics.html
   1246  142. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Base-Built-in-Functions.html
   1247  143. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Options.html#index-ml_005ba_005dsx
   1248  144. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Options.html#index-ml_005ba_005dsx
   1249  145. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Options.html#index-mfrecipe
   1250  146. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Options.html#index-mdiv32
   1251  147. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Options.html#index-mlam-bh
   1252  148. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Options.html#index-mlamcas
   1253  149. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Options.html#index-mld-seq-sa
   1254  150. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Options.html#index-mrecip_003dopt
   1255  151. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Options.html#index-mrecip
   1256  152. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Options.html#index-mexplicit-relocs-1
   1257  153. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Options.html#index-mrelax-2
   1258  154. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Options.html#index-mpass-mrelax-to-as
   1259  155. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Options.html#index-mtls-dialect-1
   1260  156. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/LoongArch-Options.html#index-mtls-dialect-1
   1261  157. https://gcc.gnu.org/gcc-14/changes.html#riscv
   1262  158. https://rivai-ic.com.cn/
   1263  159. https://www.intel.com/
   1264  160. https://www.ventanamicro.com/
   1265  161. https://www.rivosinc.com/
   1266  162. https://github.com/riscv-non-isa/rvv-intrinsic-doc/tree/v1.0.x
   1267  163. https://github.com/riscv-non-isa/rvv-intrinsic-doc/pull/234
   1268  164. https://eswincomputing.com/
   1269  165. https://plctlab.org/
   1270  166. https://www.andestech.com/
   1271  167. https://rivai-ic.com.cn/
   1272  168. https://www.intel.com/
   1273  169. https://bluewhale.systems/
   1274  170. https://gcc.gnu.org/gcc-14/changes.html#sparc
   1275  171. https://gcc.gnu.org/gcc-14/changes.html#analyzer
   1276  172. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-infinite-loop
   1277  173. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-overlapping-buffers
   1278  174. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-undefined-behavior-strtok
   1279  175. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Static-Analyzer-Options.html#index-fanalyzer-checker
   1280  176. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Static-Analyzer-Options.html#index-fanalyzer
   1281  177. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Static-Analyzer-Options.html#index-fanalyzer
   1282  178. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-allocation-size
   1283  179. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-array-index
   1284  180. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-assertion
   1285  181. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-divisor
   1286  182. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-offset
   1287  183. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-size
   1288  184. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Common-Function-Attributes.html#index-null_005fterminated_005fstring_005farg-function-attribute
   1289  185. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Common-Function-Attributes.html#index-format-function-attribute
   1290  186. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Common-Function-Attributes.html#index-alloc_005fsize-function-attribute
   1291  187. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Static-Analyzer-Options.html#index-fanalyzer
   1292  188. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-allocation-size
   1293  189. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-out-of-bounds
   1294  190. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-allocation-size
   1295  191. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-out-of-bounds
   1296  192. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-text-art-charset
   1297  193. https://gcc.gnu.org/gcc-14/changes.html#sarif
   1298  194. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format
   1299  195. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fno-diagnostics-json-formatting
   1300  196. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Developer-Options.html#index-ftime-report
   1301  197. https://gcc.gnu.org/onlinedocs/gcc-14.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format
   1302  198. https://gcc.gnu.org/gcc-14/changes.html#plugins
   1303  199. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=3a1e9f3ed7aa49adad02190ace0614e0b37fc089
   1304  200. https://gcc.gnu.org/gcc-14/changes.html#14.1
   1305  201. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=14.0
   1306  202. https://gcc.gnu.org/gcc-14/changes.html#14.2
   1307  203. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=14.2
   1308  204. https://gcc.gnu.org/gcc-14/changes.html#14.3
   1309  205. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=14.3
   1310  206. https://gcc.gnu.org/onlinedocs/
   1311  207. mailto:gcc-help (a] gcc.gnu.org
   1312  208. mailto:gcc (a] gcc.gnu.org
   1313  209. https://gcc.gnu.org/lists.html
   1314  210. https://www.fsf.org/
   1315  211. https://gcc.gnu.org/about.html
   1316 ======================================================================
   1317 http://gcc.gnu.org/gcc-13/index.html
   1318 
   1319                              GCC 13 Release Series
   1320 
   1321    May 21, 2024
   1322 
   1323    The GCC developers are pleased to announce the release of GCC 13.3.
   1324 
   1325    This release is a bug-fix release, containing fixes for regressions in
   1326    GCC 13.2 relative to previous releases of GCC.
   1327 
   1328 Release History
   1329 
   1330    GCC 13.3
   1331           May 21, 2024 ([1]changes, [2]documentation)
   1332 
   1333    GCC 13.2
   1334           July 27, 2023 ([3]changes, [4]documentation)
   1335 
   1336    GCC 13.1
   1337           April 26, 2023 ([5]changes, [6]documentation)
   1338 
   1339 References and Acknowledgements
   1340 
   1341    GCC used to stand for the GNU C Compiler, but since the compiler
   1342    supports several other languages aside from C, it now stands for the
   1343    GNU Compiler Collection.
   1344 
   1345    The GCC developers would like to thank the numerous people that have
   1346    contributed new features, improvements, bug fixes, and other changes as
   1347    well as test results to GCC. This [7]amazing group of volunteers is
   1348    what makes GCC successful.
   1349 
   1350    For additional information about GCC please refer to the [8]GCC project
   1351    web site or contact the [9]GCC development mailing list.
   1352 
   1353    To obtain GCC please use [10]our mirror sites or [11]our version
   1354    control system.
   1355 
   1356 
   1357     For questions related to the use of GCC, please consult these web
   1358     pages and the [12]GCC manuals. If that fails, the
   1359     [13]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   1360     web pages and the development of GCC are welcome on our developer
   1361     list at [14]gcc (a] gcc.gnu.org. All of [15]our lists have public
   1362     archives.
   1363 
   1364    Copyright (C) [16]Free Software Foundation, Inc. Verbatim copying and
   1365    distribution of this entire article is permitted in any medium,
   1366    provided this notice is preserved.
   1367 
   1368    These pages are [17]maintained by the GCC team. Last modified
   1369    2024-05-30.
   1370 
   1371 References
   1372 
   1373    1. https://gcc.gnu.org/gcc-13/changes.html
   1374    2. https://gcc.gnu.org/onlinedocs/13.3.0/
   1375    3. https://gcc.gnu.org/gcc-13/changes.html
   1376    4. https://gcc.gnu.org/onlinedocs/13.2.0/
   1377    5. https://gcc.gnu.org/gcc-13/changes.html
   1378    6. https://gcc.gnu.org/onlinedocs/13.1.0/
   1379    7. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Contributors.html
   1380    8. https://gcc.gnu.org/index.html
   1381    9. mailto:gcc (a] gcc.gnu.org
   1382   10. https://gcc.gnu.org/mirrors.html
   1383   11. https://gcc.gnu.org/git.html
   1384   12. https://gcc.gnu.org/onlinedocs/
   1385   13. mailto:gcc-help (a] gcc.gnu.org
   1386   14. mailto:gcc (a] gcc.gnu.org
   1387   15. https://gcc.gnu.org/lists.html
   1388   16. https://www.fsf.org/
   1389   17. https://gcc.gnu.org/about.html
   1390 ======================================================================
   1391 http://gcc.gnu.org/gcc-13/changes.html
   1392 
   1393                              GCC 13 Release Series
   1394                         Changes, New Features, and Fixes
   1395 
   1396    This page is a "brief" summary of some of the huge number of
   1397    improvements in GCC 13. You may also want to check out our [1]Porting
   1398    to GCC 13 page and the [2]full GCC documentation.
   1399 
   1400 Caveats
   1401 
   1402      * OpenMP offloading to Intel MIC has been removed.
   1403      * The support for the cr16-elf, tilegx*-linux, tilepro*-linux,
   1404        hppa[12]*-*-hpux10*, hppa[12]*-*-hpux11* and m32c-rtems
   1405        configurations has been removed.
   1406      * Support for Solaris 11.3 (*-*-solaris2.11.3) has been declared
   1407        obsolete. The next release of GCC will have corresponding code
   1408        permanently removed. Details can be found in the [3]announcement.
   1409      * Support for emitting the STABS debugging format (including the
   1410        -gstabs and -gxcoff options) has been removed. (This means the dbx
   1411        debugger is no longer supported, either.)
   1412      * Legacy debug info compression option -gz=zlib-gnu was removed and
   1413        the option is ignored right now.
   1414      * [4]-Warray-bounds=2 will no longer issue warnings for out of bounds
   1415        accesses to trailing struct members of one-element array type
   1416        anymore. Instead it diagnoses accesses to trailing arrays according
   1417        to [5]-fstrict-flex-arrays.
   1418      * [6]-fanalyzer is still only suitable for analyzing C code. In
   1419        particular, using it on C++ is unlikely to give meaningful output.
   1420      * In the arm port, support for the iWMMXt extensions, enabled through
   1421        -mcpu=iwmmxt, has been deprecated and will be removed in a future
   1422        release. This includes support for the [7]iWMMXt built-in
   1423        functions.
   1424      * For C++, construction of the global iostream objects std::cout,
   1425        std::cin, etc. is now done inside the standard library, instead of
   1426        in every source file that includes the <iostream> header. This
   1427        change improves the start-up performance of C++ programs, but it
   1428        means that code compiled with GCC 13.1 will crash if the correct
   1429        version of libstdc++.so is not used at run time. See the
   1430        [8]documentation about using the right libstdc++.so at run time.
   1431        Future GCC releases will mitigate the problem so that the program
   1432        cannot be run at all with an older libstdc++.so.
   1433 
   1434 [9]General Improvements
   1435 
   1436      * [10]OpenMP
   1437           + Reverse offload is now supported with AMD GCN and nvptx
   1438             devices. Additionally, the requires handling has been improved
   1439             and all clauses are now accepted. If a requirement cannot be
   1440             fulfilled for an accessible device, this device is excluded
   1441             from the list of available devices. This may imply that the
   1442             only device left is the host (the initial device). In
   1443             particular, unified_address and unified_shared_memory are
   1444             unsupported by all non-host devices.
   1445           + OpenMP 5.0: Fortran now supports some non-rectangular loop
   1446             nests; for C/C++, the support was added in GCC 11.
   1447           + The following OpenMP 5.1 features have been added: the
   1448             omp_all_memory reserved locator, the inoutset modifier to the
   1449             depend clause, the nowait clause for the taskwait directive
   1450             and the omp_target_is_accessible, omp_target_memcpy_async,
   1451             omp_target_memcpy_rect_async and omp_get_mapped_ptr API
   1452             routines. The assume and assumes directives, the begin/end
   1453             declare target syntax in C/C++ and device-specific ICV
   1454             settings with environment variables are now supported.
   1455           + Initial support for OpenMP 5.2 features has been added:
   1456             firstprivate and allocate clauses on the scope construct; the
   1457             OpenMP 5.2 syntax of the linear clause; new enum/constants
   1458             omp_initial_device and omp_invalid_device; and optionally
   1459             omitting the map-type in target enter/exit data. The enter
   1460             clause (as alias for to) has been added to the declare target
   1461             directive. Also added have been the omp_in_explicit_task
   1462             routine and the doacross clause as alias for depend with
   1463             source/sink modifier.
   1464           + The _ALL suffix to the device-scope environment variables
   1465             added in Technical Report (TR11) is already handled.
   1466           + For user defined allocators requesting high bandwidth or large
   1467             capacity memspaces or interleaved partitioning, the
   1468             [11]memkind library is used, if available at run time.
   1469      * AddressSanitizer defaults to detect_stack_use_after_return=1 on
   1470        GNU/Linux targets. For compatibility, it can be disabled with env
   1471        ASAN_OPTIONS=detect_stack_use_after_return=0.
   1472      * New debug info compression option value -gz=zstd has been added.
   1473      * Link-time optimization improvements:
   1474           + LTO supports the newly added jobserver of GNU make jobserver
   1475             that uses named pipes (--jobserver-style=fifo) by default.
   1476           + If make's jobserver is active, parallel LTO WPA streaming
   1477             communicates with it and thus avoids system overcommitting.
   1478      * -Ofast, -ffast-math and -funsafe-math-optimizations will no longer
   1479        add startup code to alter the floating-point environment when
   1480        producing a shared object with -shared.
   1481      * GCC can now emit its diagnostics using [12]SARIF. This is a
   1482        JSON-based format suited for capturing the results of static
   1483        analysis tools (like GCC's [13]-fanalyzer), but it can also be used
   1484        to capture other GCC warnings and errors in a machine-readable
   1485        format. Specifically, the [14]-fdiagnostics-format= option has been
   1486        extended to support these new values:
   1487           + -fdiagnostics-format=sarif-stderr
   1488           + -fdiagnostics-format=sarif-file
   1489           + -fdiagnostics-format=json-stderr, a synonym for the existing
   1490             -fdiagnostics-format=json
   1491           + -fdiagnostics-format=json-file
   1492        where the json-prefixed variants refer to GCC's own JSON diagnostic
   1493        format.
   1494      * Support for profiling and test coverage in freestanding
   1495        environments has been added, see also [15]Profiling and Test
   1496        Coverage in Freestanding Environments.
   1497      * New options -fharden-compares and -fharden-conditional-branches to
   1498        verify compares and conditional branches, to detect some
   1499        power-deprivation hardware attacks, using reversed conditions.
   1500 
   1501 [16]New Languages and Language specific improvements
   1502 
   1503   [17]Ada
   1504 
   1505      * Traceback support added in RTEMS for the PPC ELF and ARM
   1506        architectures.
   1507      * Support for versions older than VxWorks 7 has been removed.
   1508      * General improvements to the contracts in the standard libraries.
   1509      * Addition of GNAT.Binary_Search.
   1510      * Further additions and fixes for the Ada 2022 specification.
   1511      * The Pragma SPARK_Mode=>Auto is now accepted. Contract analysis has
   1512        been further improved.
   1513      * Documentation improvements.
   1514 
   1515   [18]C family
   1516 
   1517      * New warnings:
   1518           + [19]-Wxor-used-as-pow warns about uses of ^, the exclusive or
   1519             operator, where it appears the user meant exponentiation
   1520             ([20]PR90885)
   1521      * Three new function attributes for documenting int arguments that
   1522        are file descriptors:
   1523           + [21]__attribute__((fd_arg(N)))
   1524           + [22]__attribute__((fd_arg_read(N)))
   1525           + [23]__attribute__((fd_arg_write(N)))
   1526        These are used by [24]-fanalyzer to detect misuses of file
   1527        descriptors.
   1528      * A new statement attribute for C++23 [25]P1774R8 Portable
   1529        assumptions support also in C or older C++:
   1530        [26]__attribute__((assume(EXPR)));
   1531      * GCC can now control when to treat the trailing array of a structure
   1532        as a flexible array member for the purpose of accessing the
   1533        elements of such an array. By default, all trailing arrays in
   1534        aggregates are treated as flexible array members. Use the new
   1535        command-line option [27]-fstrict-flex-arrays to control which array
   1536        members are treated as flexible arrays.
   1537 
   1538   [28]C
   1539 
   1540      * Several C23 features have been implemented:
   1541           + [29]N3042, Introduce the nullptr constant
   1542           + [30]N2963, Enhanced Enumerations (fixed underlying types)
   1543           + [31]N2975, Relax requirements for variadic parameter lists
   1544           + [32]N3007, Type inference for object definitions (auto)
   1545           + [33]N3018, The constexpr specifier for object definitions
   1546           + [34]N3038, Introduce storage-class specifiers for compound
   1547             literals
   1548           + typeof (previously supported as an extension) and
   1549             typeof_unqual
   1550           + New keywords alignas, alignof, bool, false, static_assert,
   1551             thread_local, true
   1552           + [35]N2764, The noreturn attribute
   1553           + Support for empty initializer braces
   1554           + __STDC_VERSION_*_H__ header version macros
   1555           + Removal of ATOMIC_VAR_INIT
   1556           + unreachable macro in <stddef.h>
   1557           + Removal of trigraphs
   1558           + Removal of unprototyped functions
   1559           + printf and scanf format checking with [36]-Wformat for %wN and
   1560             %wfN format length modifiers
   1561           + [37]N2836, Identifier Syntax using Unicode Standard Annex 31
   1562      * In addition to those C23 features, existing features adopted in C23
   1563        have been adjusted to follow C23 requirements and are not diagnosed
   1564        with -std=c2x -Wpedantic.
   1565      * New warnings:
   1566           + [38]-Wenum-int-mismatch warns about mismatches between an
   1567             enumerated type and an integer type ([39]PR105131)
   1568 
   1569   [40]C++
   1570 
   1571      * Excess precision support (which has been available in C since GCC
   1572        4.5) has been implemented for C++ as well. It is enabled by default
   1573        in strict standard modes like -std=c++17, where it defaults to
   1574        -fexcess-precision=standard, while in GNU standard modes like
   1575        -std=gnu++20 it defaults to -fexcess-precision=fast. The option
   1576        mainly affects IA-32/x86-64 using x87 math and in some cases on
   1577        Motorola 68000, where float and double expressions are evaluated in
   1578        long double precision and S/390, System z, IBM z Systems where
   1579        float expressions are evaluated in double precision. Also, on
   1580        several architectures where std::float16_t or std::bfloat16_t types
   1581        are supported those are evaluated in float precision.
   1582        -fexcess-precision=fast restores previous behavior.
   1583      * Several C++23 features have been implemented:
   1584           + [41]P2324R1, Labels at the end of compound statements
   1585             ([42]PR103539)
   1586           + [43]P2255R2, A type trait to detect reference binding to
   1587             temporary ([44]PR104477)
   1588           + [45]P2327R1, De-deprecating volatile compound operations
   1589           + [46]P2437R1, Support for #warning ([47]PR106646)
   1590           + [48]P2290R3, Delimited escape sequences ([49]PR106645)
   1591           + [50]P2071R2, Named universal character escapes ([51]PR106648)
   1592           + [52]P2513R3, char8_t Compatibility and Portability Fix
   1593             ([53]PR106656)
   1594           + [54]P1169R4, static operator() ([55]PR106651)
   1595           + [56]P2266R3, Simpler implicit move ([57]PR101165)
   1596           + [58]P2468R2, The Equality Operator You Are Looking For
   1597             ([59]PR106644)
   1598           + [60]P2362R3, Remove non-encodable
   1599             wide character literals and multicharacter wide character lite
   1600             rals ([61]PR106647)
   1601           + [62]P2448R2, Relaxing some constexpr restrictions
   1602             ([63]PR106649)
   1603           + [64]P1467R9, Extended floating-point types and standard names
   1604             ([65]PR106652)
   1605           + [66]P1774R8, Portable assumptions ([67]PR106654)
   1606           + [68]P2295R6, Support for
   1607             UTF-8 as a portable source file encoding ([69]PR106655)
   1608           + [70]P2589R1, static operator[] ([71]PR107684)
   1609      * New warnings:
   1610           + [72]-Wself-move warns when a value is moved to itself with
   1611             std::move ([73]PR81159)
   1612           + [74]-Wdangling-reference warns when a reference is bound to a
   1613             temporary whose lifetime has ended ([75]PR106393)
   1614      * The [76]-Wpessimizing-move and [77]-Wredundant-move warnings have
   1615        been extended to warn in more contexts.
   1616      * The [78]-nostdlib++ option has been added, to enable linking with
   1617        g++ without implicitly linking in the C++ standard library.
   1618 
   1619     [79]Runtime Library (libstdc++)
   1620 
   1621      * Improved experimental support for C++20, including:
   1622           + <format> header and std::format.
   1623           + std::chrono::utc_clock and other clocks, time zones, and
   1624             std::format support in the <chrono> header.
   1625      * Improved experimental support for C++23, including:
   1626           + Additions to the <ranges> header: views::zip,
   1627             views::zip_transform, views::adjacent,
   1628             views::adjacent_transform views::pairwise, views::slide,
   1629             views::chunk, views::chunk_by, views::repeat, views::chunk_by,
   1630             views::cartesian_product, views::as_rvalue, views::enumerate,
   1631             views::as_const.
   1632           + Additions to the <algorithm> header: ranges::contains,
   1633             ranges::contains_subrange, ranges::iota, ranges::find_last,
   1634             ranges::find_last_if, ranges::find_last_if_not,
   1635             ranges::fold_left, ranges::fold_left_first,
   1636             ranges::fold_right, ranges::fold_right_last,
   1637             ranges::fold_left_with_iter,
   1638             ranges::fold_left_first_with_iter.
   1639           + Monadic operations for std::expected.
   1640           + Constexpr std::bitset, std::to_chars and std::from_chars.
   1641           + Library support for extended floating-point types.
   1642      * Support for the <experimental/scope> header from v3 of the Library
   1643        Fundamentals Technical Specification.
   1644      * Support for the <experimental/synchronized_value> header from v2 of
   1645        the Concurrency Technical Specification.
   1646      * Support for many previously unavailable features in freestanding
   1647        mode, thanks to Arsen Arsenovic. For example, std::tuple is now
   1648        available for freestanding compilation. The freestanding subset
   1649        contains all the components made freestanding by [80]P1642, and
   1650        libstdc++ adds more components such as std::array and
   1651        std::string_view. Additionally, libstdc++ now respects the
   1652        -ffreestanding compiler option and so it is not necessary to build
   1653        a separate freestanding installation of libstdc++. Compiling with
   1654        -ffreestanding restricts the available features to the freestanding
   1655        subset, even if libstdc++ was built as a full, hosted
   1656        implementation.
   1657 
   1658   [81]D
   1659 
   1660      * Support for the D programming language has been updated to version
   1661        2.103.1 of the language and run-time library. Full changelog for
   1662        this release and previous releases can be found on the
   1663        [82]dlang.org website.
   1664      * The following GCC attributes are now recognized and available from
   1665        the gcc.attributes module with short-hand aliases for convenience:
   1666           + @attribute("no_sanitize", arguments) or
   1667             @no_sanitize(arguments).
   1668           + @attribute("register") or @register.
   1669           + @attribute("simd") or @simd.
   1670           + @attribute("simd_clones", mask) or @simd_clones(mask).
   1671           + @attribute("visibility", arguments) or @visibility(arguments).
   1672      * New aliases have been added to gcc.attributes for compatibility
   1673        with ldc.attributes.
   1674           + The @hidden attribute is an alias for @attribute("visibility",
   1675             "hidden").
   1676           + The @noSanitize attribute is an alias for
   1677             @attribute("no_sanitize").
   1678      * Vector operation intrinsics prefetch, loadUnaligned,
   1679        storeUnaligned, shuffle, shufflevector, extractelement,
   1680        insertelement, convertvector, and blendvector have been added to
   1681        the gcc.simd module.
   1682      * New warnings:
   1683           + [83]-Wbuiltin-declaration-mismatch= warns when a built-in
   1684             function is declared with the wrong signature.
   1685           + [84]-Wmismatched-special-enum warns when a special enum is
   1686             declared with the wrong base type.
   1687      * New version identifier D_Optimized is now predefined when the -O
   1688        option, or any higher optimization level is used.
   1689      * The predefinition of version D_Exceptions can now by controlled by
   1690        the option -fexception.
   1691      * The predefinition of version D_TypeInfo can now by controlled by
   1692        the option -frtti.
   1693      * The -fdebug= and -fversion= compiler switches no longer accept an
   1694        integer argument.
   1695 
   1696   [85]Fortran
   1697 
   1698      * Finalization is now fully supported.
   1699 
   1700   [86]Go
   1701 
   1702      * GCC 13, like GCC 12, provides a complete implementation of the Go
   1703        1.18 user packages.
   1704      * Although Go 1.18 includes support for generic programming, that
   1705        support is not yet available in GCC.
   1706 
   1707   [87]Modula-2
   1708 
   1709      * Support for the language Modula-2 has been added. This includes
   1710        support for the ISO/IEC 10514-1, PIM2, PIM3, PIM4 dialects together
   1711        with a complete set of ISO/IEC 10514-1 and PIM libraries.
   1712      * The <* noreturn *> attribute is supported with the -Wreturn-type
   1713        [88]option.
   1714 
   1715 [89]New Targets and Target Specific Improvements
   1716 
   1717   [90]AArch64
   1718 
   1719      * The AArch64 target now supports Decimal Floating-point in the BID
   1720        format through the libbid library.
   1721      * A number of new CPUs are supported through the -mcpu and -mtune
   1722        options (GCC identifiers in parentheses).
   1723           + Ampere-1A (ampere1a).
   1724           + Arm Cortex-A715 (cortex-a715).
   1725           + Arm Cortex-X1C (cortex-x1c).
   1726           + Arm Cortex-X3 (cortex-x3).
   1727           + Arm Neoverse V2 (neoverse-v2).
   1728      * Support has been added for the armv9.1-a, armv9.2-a and armv9.3-a
   1729        arguments to the -march= option.
   1730      * The FEAT_LRCPC feature is now supported by generating the LDAPR
   1731        instructions for C and C++ atomic loads with an acquire memory
   1732        model. This is enabled when compiling with the +rcpc extension to
   1733        -march or a CPU target that supports this feature.
   1734      * The FEAT_CSSC feature from the 2022 Arm Architecture extensions is
   1735        supported through the +cssc extension option. When enabled, scalar
   1736        operations like integer minimum, maximum, absolute value, count
   1737        trailing zeroes (__builtin_ctz), population count
   1738        (__builtin_popcount) can be implemented in a single instruction.
   1739      * The FEAT_LSE2 feature is now supported through libatomic and
   1740        provides lockless 16-byte atomics on systems that implement it.
   1741 
   1742   [91]AMD Radeon (GCN)
   1743 
   1744      * Support for the Instinct MI200 series devices ([92] gfx90a) has
   1745        been added.
   1746      * SIMD vectorization support has been improved; this and
   1747        stack-handling changes [93]require newlib 4.3.0 (or newer).
   1748 
   1749   [94]arm
   1750 
   1751      * A number of new CPUs are supported through the -mcpu and -mtune
   1752        options (GCC identifiers in parentheses).
   1753           + STAR-MC1 (star-mc1).
   1754           + Arm Cortex-X1C (cortex-x1c).
   1755           + Arm Cortex-M85 (cortex-m85).
   1756      * Support has been added for the M-profile PACBTI extension that can
   1757        help harden the generated code against return-oriented and
   1758        jump-oriented attacks. It can be enabled through the
   1759        -mbranch-protection= option.
   1760 
   1761   [95]AVR
   1762 
   1763      * Support for the following devices has been added in v13.3:
   1764           + ATtiny102, ATtiny104, ATtiny424, ATtiny426, ATtiny427,
   1765             ATtiny824, ATtiny826, ATtiny827, ATtiny1624, ATtiny1626,
   1766             ATtiny1627, ATtiny3224, ATtiny3226, ATtiny3227, AVR32DD14,
   1767             AVR32DD20, AVR32DD28, AVR32DD32, AVR32DU14, AVR32DU20,
   1768             AVR32DU28, AVR32DU32, AVR32EA28, AVR32EA32, AVR32EA48,
   1769             AVR64DD14, AVR64DD20, AVR64DD28, AVR64DD32, AVR64DU28,
   1770             AVR64DU32, AVR64EA28, AVR64EA32, AVR64EA48, ATA5787, ATA5835,
   1771             ATA5700M322.
   1772      * Support for the following devices has been added in v13.4:
   1773           + AVR32SD20, AVR32SD28, AVR32SD32, AVR64SD28, AVR64SD32,
   1774             AVR64SD48.
   1775 
   1776   [96]IA-32/x86-64
   1777 
   1778      * For both C and C++ the __bf16 type is supported on x86 systems with
   1779        SSE2 and above enabled.
   1780      * Use this __bf16 type for AVX512BF16 intrinsics instead of
   1781        __bfloat16 which is typedef for short. __bf16 is now part of the
   1782        x86 psABI. Users need to adjust their AVX512BF16-related source
   1783        code when upgrading to GCC 13.
   1784      * New ISA extension support for Intel AMX-COMPLEX was added.
   1785        AMX-COMPLEX intrinsics are available via the -mamx-complex compiler
   1786        switch.
   1787      * New ISA extension support for Intel AMX-FP16 was added. AMX-FP16
   1788        intrinsics are available via the -mamx-fp16 compiler switch.
   1789      * New ISA extension support for Intel AVX-IFMA was added. AVX-IFMA
   1790        intrinsics are available via the -mavxifma compiler switch.
   1791      * New ISA extension support for Intel AVX-NE-CONVERT was added.
   1792        AVX-NE-CONVERT intrinsics are available via the -mavxneconvert
   1793        compiler switch.
   1794      * New ISA extension support for Intel AVX-VNNI-INT8 was added.
   1795        AVX-VNNI-INT8 intrinsics are available via the -mavxvnniint8
   1796        compiler switch.
   1797      * New ISA extension support for Intel CMPccXADD was added. CMPccXADD
   1798        intrinsics are available via the -mcmpccxadd compiler switch.
   1799      * New ISA extension support for Intel PREFETCHI was added. PREFETCHI
   1800        intrinsics are available via the -mprefetchi compiler switch.
   1801      * New ISA extension support for Intel RAO-INT was added. RAO-INT
   1802        intrinsics are available via the -mraoint compiler switch.
   1803      * GCC now supports the Intel CPU named Raptor Lake through
   1804        -march=raptorlake. Raptor Lake is based on Alder Lake.
   1805      * GCC now supports the Intel CPU named Meteor Lake through
   1806        -march=meteorlake. Meteor Lake is based on Alder Lake.
   1807      * GCC now supports the Intel CPU named Sierra Forest through
   1808        -march=sierraforest. Based on ISA extensions enabled on Alder Lake,
   1809        the switch further enables the AVX-IFMA, AVX-NE-CONVERT,
   1810        AVX-VNNI-INT8, CMPccXADD, ENQCMD and UINTR ISA extensions.
   1811      * GCC now supports the Intel CPU named Grand Ridge through
   1812        -march=grandridge. Grand Ridge is based on Sierra Forest.
   1813      * GCC now supports the Intel CPU named Emerald Rapids through
   1814        -march=emeraldrapids. Emerald Rapids is based on Sapphire Rapids.
   1815      * GCC now supports the Intel CPU named Granite Rapids through
   1816        -march=graniterapids. Based on Sapphire Rapids, the switch further
   1817        enables the AMX-FP16 and PREFETCHI ISA extensions.
   1818      * GCC now supports the Intel CPU named Granite Rapids D through
   1819        -march=graniterapids-d. Based on Granite Rapids, the switch further
   1820        enables the AMX-COMPLEX ISA extensions.
   1821      * GCC now supports AMD CPUs based on the znver4 core via
   1822        -march=znver4. The switch makes GCC consider using 512-bit vectors
   1823        when auto-vectorizing.
   1824 
   1825   [97]LoongArch
   1826 
   1827      * New features
   1828           + The new command-line option -mexplicit-relocs decides whether
   1829             to use the assembler relocation operator when dealing with
   1830             symbolic addresses. It is enabled by default if a compatible
   1831             assembler (binutils 2.40 or later) is present at GCC build
   1832             time.
   1833           + The new command-line option -mdirect-extern-access can be used
   1834             to prevent accessing external symbols through GOT.
   1835           + The new variable attribute [98]model has been added.
   1836      * Built-in functions
   1837           + The rint and copysign mathematical builtins (and their float
   1838             variants) are now implemented as inline LoongArch intrinsics.
   1839           + The lrint, logb, scalbln, scalbn and ldexp mathematical
   1840             builtins (and their float variants) are now implemented as
   1841             inline LoongArch intrinsics when using -fno-math-errno.
   1842           + The lceil and lfloor mathematical builtins (and their float
   1843             variants) are now implemented as inline LoongArch intrinsics
   1844             when using -ffp-int-builtin-inexact.
   1845      * Subprojects Support
   1846           + libvtv now supports LoongArch.
   1847           + libitm now supports LoongArch.
   1848           + Address sanitizers other than HWASan and TSan are now
   1849             supported on LoongArch.
   1850 
   1851   [99]NVPTX
   1852 
   1853      * The default value for the [100]-march option can be now changed
   1854        when [101]building GCC using the [102]--with-arch= configure
   1855        option. GCC's target libraries are then build both with sm_30 and
   1856        the specified target architecture. If not specified, GCC defaults
   1857        to sm_30.
   1858 
   1859   [103]RISC-V
   1860 
   1861      * Support for vector intrinsics as specified in [104]version 0.11 of
   1862        the RISC-V vector intrinsic specification, thanks Ju-Zhe Zhong from
   1863        [105]RiVAI for contributing most of implementation.
   1864      * Support for the following standard extensions has been added:
   1865           + Zawrs
   1866           + Zbkb
   1867           + Zbkc
   1868           + Zbkx
   1869           + Zdinx
   1870           + Zfinx
   1871           + Zfh
   1872           + Zfhmin
   1873           + Zhinx
   1874           + Zhinxmin
   1875           + Zicbom
   1876           + Zicbop
   1877           + Zicboz
   1878           + Zknd
   1879           + Zkne
   1880           + Zksed
   1881           + Zksh
   1882           + Zmmul
   1883      * Support for the following vendor extensions has been added:
   1884           + XTheadBa
   1885           + XTheadBb
   1886           + XTheadBs
   1887           + XTheadCmo
   1888           + XTheadCondMov
   1889           + XTheadFMemIdx
   1890           + XTheadFmv
   1891           + XTheadInt
   1892           + XTheadMac
   1893           + XTheadMemIdx
   1894           + XTheadMemPair
   1895           + XTheadSync
   1896      * The following new CPUs are supported through the -mcpu option (GCC
   1897        identifiers in parentheses).
   1898           + T-Head's XuanTie C906 (thead-c906).
   1899      * Improves the multi-lib selection mechanism for the bare-metal
   1900        toolchain (riscv*-elf*). GCC will now automatically select the
   1901        best-fit multi-lib candidate instead of requiring all possible
   1902        reuse rules to be listed at build time.
   1903 
   1904 [106]Operating Systems
   1905 
   1906   [107]Windows
   1907 
   1908      * The GNU threads library used by the win32 thread model has been
   1909        reimplemented using direct Win32 API calls, except for the
   1910        Objective-C specific subset. It requires Windows XP/Server 2003 or
   1911        later. The new implementation also adds the support needed for the
   1912        C++11 threads, using again direct Win32 API calls; this additional
   1913        layer requires Windows Vista/Server 2008 or later. It is
   1914        recommended to use a recent version of MinGW-W64 in conjunction
   1915        with the win32 thread model.
   1916 
   1917 [108]Improvements to Static Analyzer
   1918 
   1919      * The analyzer has gained 20 new warnings:
   1920           + [109]-Wanalyzer-allocation-size
   1921           + [110]-Wanalyzer-deref-before-check
   1922           + [111]-Wanalyzer-exposure-through-uninit-copy
   1923           + Seven new warnings relating to misuse of file descriptors:
   1924                o [112]-Wanalyzer-fd-access-mode-mismatch
   1925                o [113]-Wanalyzer-fd-double-close
   1926                o [114]-Wanalyzer-fd-leak
   1927                o [115]-Wanalyzer-fd-phase-mismatch (e.g. calling accept on
   1928                  a socket before calling listen on it)
   1929                o [116]-Wanalyzer-fd-type-mismatch (e.g. using a stream
   1930                  socket operation on a datagram socket)
   1931                o [117]-Wanalyzer-fd-use-after-close
   1932                o [118]-Wanalyzer-fd-use-without-check
   1933             along with special-casing handling of the behavior of open,
   1934             close, creat, dup, dup2, dup3, pipe, pipe2, read, and write.
   1935           + [119]-Wanalyzer-imprecise-fp-arithmetic
   1936           + [120]-Wanalyzer-infinite-recursion
   1937           + [121]-Wanalyzer-jump-through-null
   1938           + [122]-Wanalyzer-out-of-bounds
   1939           + [123]-Wanalyzer-putenv-of-auto-var
   1940           + [124]-Wanalyzer-tainted-assertion
   1941           + Four new warnings for misuses of <stdarg.h>:
   1942                o [125]-Wanalyzer-va-list-leak for complaining about
   1943                  missing va_end after a va_start or va_copy
   1944                o [126]-Wanalyzer-va-list-use-after-va-end for complaining
   1945                  about va_arg or va_copy used on a va_list that's had
   1946                  va_end called on it
   1947                o [127]-Wanalyzer-va-arg-type-mismatch for type-checking of
   1948                  va_arg usage in interprocedural execution paths against
   1949                  the types of the parameters that were actually passed to
   1950                  the variadic call
   1951                o [128]-Wanalyzer-va-list-exhausted for complaining in
   1952                  interprocedural execution paths if va_arg is used too
   1953                  many times on a va_list
   1954        along with numerous other improvements.
   1955 
   1956 [129]Improvements for plugin authors
   1957 
   1958      * GCC diagnostics can now be [130]associated with rules such as from
   1959        coding standards documents, or specifications. Such rules have a
   1960        code name and can have a URL, which GCC can print in text form or
   1961        capture in its [131]SARIF output when emitting diagnostics.
   1962 
   1963 Other significant improvements
   1964 
   1965 [132]GCC 13.1
   1966 
   1967    This is the [133]list of problem reports (PRs) from GCC's bug tracking
   1968    system that are known to be fixed in the 13.1 release. This list might
   1969    not be complete (that is, it is possible that some PRs that have been
   1970    fixed are not listed here).
   1971 
   1972 [134]GCC 13.2
   1973 
   1974    This is the [135]list of problem reports (PRs) from GCC's bug tracking
   1975    system that are known to be fixed in the 13.2 release. This list might
   1976    not be complete (that is, it is possible that some PRs that have been
   1977    fixed are not listed here).
   1978 
   1979 [136]GCC 13.3
   1980 
   1981    This is the [137]list of problem reports (PRs) from GCC's bug tracking
   1982    system that are known to be fixed in the 13.3 release. This list might
   1983    not be complete (that is, it is possible that some PRs that have been
   1984    fixed are not listed here).
   1985 
   1986   Language Specific Changes
   1987 
   1988   C++
   1989 
   1990      * The libstdc++exp.a library now includes all the Filesystem TS
   1991        symbols from the libstdc++fs.a library, and the experimental
   1992        symbols for the C++23 std::stacktrace class from the
   1993        libstdc++_libbacktrace.a library. This means that -lstdc++exp is
   1994        the only library needed for all experimental libstdc++ features.
   1995 
   1996 
   1997     For questions related to the use of GCC, please consult these web
   1998     pages and the [138]GCC manuals. If that fails, the
   1999     [139]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   2000     web pages and the development of GCC are welcome on our developer
   2001     list at [140]gcc (a] gcc.gnu.org. All of [141]our lists have public
   2002     archives.
   2003 
   2004    Copyright (C) [142]Free Software Foundation, Inc. Verbatim copying and
   2005    distribution of this entire article is permitted in any medium,
   2006    provided this notice is preserved.
   2007 
   2008    These pages are [143]maintained by the GCC team. Last modified
   2009    2025-04-16.
   2010 
   2011 References
   2012 
   2013    1. https://gcc.gnu.org/gcc-13/porting_to.html
   2014    2. https://gcc.gnu.org/onlinedocs/index.html#current
   2015    3. https://gcc.gnu.org/pipermail/gcc/2022-December/240322.html
   2016    4. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Warning-Options.html#index-Warray-bounds
   2017    5. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/C-Dialect-Options.html#index-fstrict-flex-arrays
   2018    6. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html
   2019    7. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/ARM-iWMMXt-Built-in-Functions.html
   2020    8. https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic
   2021    9. https://gcc.gnu.org/gcc-13/changes.html#general
   2022   10. https://gcc.gnu.org/projects/gomp/
   2023   11. http://memkind.github.io/memkind/
   2024   12. https://sarifweb.azurewebsites.net/
   2025   13. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html
   2026   14. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format
   2027   15. https://gcc.gnu.org/onlinedocs/gcc/Freestanding-Environments.html
   2028   16. https://gcc.gnu.org/gcc-13/changes.html#languages
   2029   17. https://gcc.gnu.org/gcc-13/changes.html#ada
   2030   18. https://gcc.gnu.org/gcc-13/changes.html#c-family
   2031   19. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Warning-Options.html#index-Wxor-used-as-pow
   2032   20. https://gcc.gnu.org/PR90885
   2033   21. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Common-Function-Attributes.html#index-fd_005farg-function-attribute
   2034   22. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Common-Function-Attributes.html#index-fd_005farg_005fread-function-attribute
   2035   23. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Common-Function-Attributes.html#index-fd_005farg_005fwrite-function-attribute
   2036   24. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html
   2037   25. https://wg21.link/p1774r8
   2038   26. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Statement-Attributes.html#index-assume-statement-attribute
   2039   27. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/C-Dialect-Options.html#index-fstrict-flex-arrays
   2040   28. https://gcc.gnu.org/gcc-13/changes.html#c
   2041   29. https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3042.htm
   2042   30. https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2963.htm
   2043   31. https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2975.pdf
   2044   32. https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3007.htm
   2045   33. https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3018.htm
   2046   34. https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3038.htm
   2047   35. https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2764.pdf
   2048   36. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Warning-Options.html#index-Wformat
   2049   37. https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2836.pdf
   2050   38. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Warning-Options.html#index-Wenum-int-mismatch
   2051   39. https://gcc.gnu.org/PR105131
   2052   40. https://gcc.gnu.org/gcc-13/changes.html#cxx
   2053   41. https://wg21.link/p2324
   2054   42. https://gcc.gnu.org/PR103539
   2055   43. https://wg21.link/p2255
   2056   44. https://gcc.gnu.org/PR104477
   2057   45. https://wg21.link/p2327
   2058   46. https://wg21.link/p2437
   2059   47. https://gcc.gnu.org/PR106646
   2060   48. https://wg21.link/p2290
   2061   49. https://gcc.gnu.org/PR106645
   2062   50. https://wg21.link/p2071
   2063   51. https://gcc.gnu.org/PR106648
   2064   52. https://wg21.link/p2513
   2065   53. https://gcc.gnu.org/PR106656
   2066   54. https://wg21.link/p1169r4
   2067   55. https://gcc.gnu.org/PR106651
   2068   56. https://wg21.link/p2266r3
   2069   57. https://gcc.gnu.org/PR101165
   2070   58. https://wg21.link/p2468r2
   2071   59. https://gcc.gnu.org/PR106644
   2072   60. https://wg21.link/p2362r3
   2073   61. https://gcc.gnu.org/PR106647
   2074   62. https://wg21.link/p2448r2
   2075   63. https://gcc.gnu.org/PR106649
   2076   64. https://wg21.link/p1467r9
   2077   65. https://gcc.gnu.org/PR106652
   2078   66. https://wg21.link/p1774r8
   2079   67. https://gcc.gnu.org/PR106654
   2080   68. https://wg21.link/p2295r6
   2081   69. https://gcc.gnu.org/PR106655
   2082   70. https://wg21.link/p2589r1
   2083   71. https://gcc.gnu.org/PR107684
   2084   72. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Warning-Options.html#index-Wself-move
   2085   73. https://gcc.gnu.org/PR81159
   2086   74. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wdangling-reference
   2087   75. https://gcc.gnu.org/PR106393
   2088   76. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wpessimizing-move
   2089   77. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wredundant-move
   2090   78. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Link-Options.html#index-nostdlib_002b_002b
   2091   79. https://gcc.gnu.org/gcc-13/changes.html#libstdcxx
   2092   80. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p1642r11.html
   2093   81. https://gcc.gnu.org/gcc-13/changes.html#d
   2094   82. https://dlang.org/changelog/2.103.1.html
   2095   83. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gdc/Warnings.html#index-Wno-builtin-declaration-mismatch
   2096   84. https://gcc.gnu.org/onlinedocs/gcc-13.2.0/gdc/Warnings.html#index-Wmismatched-special-enum
   2097   85. https://gcc.gnu.org/gcc-13/changes.html#fortran
   2098   86. https://gcc.gnu.org/gcc-13/changes.html#go
   2099   87. https://gcc.gnu.org/gcc-13/changes.html#modula2
   2100   88. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gm2/Compiler-options.html
   2101   89. https://gcc.gnu.org/gcc-13/changes.html#targets
   2102   90. https://gcc.gnu.org/gcc-13/changes.html#aarch64
   2103   91. https://gcc.gnu.org/gcc-13/changes.html#amdgcn
   2104   92. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/AMD-GCN-Options.html
   2105   93. https://gcc.gnu.org/install/specific.html#amdgcn-x-amdhsa
   2106   94. https://gcc.gnu.org/gcc-13/changes.html#arm
   2107   95. https://gcc.gnu.org/gcc-13/changes.html#avr
   2108   96. https://gcc.gnu.org/gcc-13/changes.html#x86
   2109   97. https://gcc.gnu.org/gcc-13/changes.html#loongarch
   2110   98. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/LoongArch-Variable-Attributes.html#LoongArch-Variable-Attributes
   2111   99. https://gcc.gnu.org/gcc-13/changes.html#nvptx
   2112  100. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Nvidia-PTX-Options.html
   2113  101. https://gcc.gnu.org/install/
   2114  102. https://gcc.gnu.org/install/specific.html#nvptx-x-none
   2115  103. https://gcc.gnu.org/gcc-13/changes.html#riscv
   2116  104. https://github.com/riscv-non-isa/rvv-intrinsic-doc/tree/v0.11.x
   2117  105. https://rivai-ic.com.cn/
   2118  106. https://gcc.gnu.org/gcc-13/changes.html#os
   2119  107. https://gcc.gnu.org/gcc-13/changes.html#windows
   2120  108. https://gcc.gnu.org/gcc-13/changes.html#analyzer
   2121  109. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-allocation-size
   2122  110. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-deref-before-check
   2123  111. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-exposure-through-uninit-copy
   2124  112. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-fd-access-mode-mismatch
   2125  113. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-fd-double-close
   2126  114. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-fd-leak
   2127  115. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-fd-phase-mismatch
   2128  116. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-fd-type-mismatch
   2129  117. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-fd-use-after-close
   2130  118. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-fd-use-without-check
   2131  119. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-imprecise-fp-arithmetic
   2132  120. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-infinite-recursion
   2133  121. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-jump-through-null
   2134  122. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-out-of-bounds
   2135  123. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-putenv-of-auto-var
   2136  124. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-assertion
   2137  125. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-va-list-leak
   2138  126. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-va-list-use-after-va-end
   2139  127. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-va-arg-type-mismatch
   2140  128. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-va-list-exhausted
   2141  129. https://gcc.gnu.org/gcc-13/changes.html#plugins
   2142  130. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=0b14f590e3e9d95b8211b77d992589d5ab4c25f0
   2143  131. https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format
   2144  132. https://gcc.gnu.org/gcc-13/changes.html#13.1
   2145  133. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=13.0
   2146  134. https://gcc.gnu.org/gcc-13/changes.html#13.2
   2147  135. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=13.2
   2148  136. https://gcc.gnu.org/gcc-13/changes.html#13.3
   2149  137. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=13.3
   2150  138. https://gcc.gnu.org/onlinedocs/
   2151  139. mailto:gcc-help (a] gcc.gnu.org
   2152  140. mailto:gcc (a] gcc.gnu.org
   2153  141. https://gcc.gnu.org/lists.html
   2154  142. https://www.fsf.org/
   2155  143. https://gcc.gnu.org/about.html
   2156 ======================================================================
   2157 http://gcc.gnu.org/gcc-12/index.html
   2158 
   2159                              GCC 12 Release Series
   2160 
   2161    Jun 20, 2024
   2162 
   2163    The GCC developers are pleased to announce the release of GCC 12.4.
   2164 
   2165    This release is a bug-fix release, containing fixes for regressions in
   2166    GCC 12.3 relative to previous releases of GCC.
   2167 
   2168 Release History
   2169 
   2170    GCC 12.4
   2171           Jun 20, 2024 ([1]changes, [2]documentation)
   2172 
   2173    GCC 12.3
   2174           May 8, 2023 ([3]changes, [4]documentation)
   2175 
   2176    GCC 12.2
   2177           Aug 19, 2022 ([5]changes, [6]documentation)
   2178 
   2179    GCC 12.1
   2180           May 6, 2022 ([7]changes, [8]documentation)
   2181 
   2182 References and Acknowledgements
   2183 
   2184    GCC used to stand for the GNU C Compiler, but since the compiler
   2185    supports several other languages aside from C, it now stands for the
   2186    GNU Compiler Collection.
   2187 
   2188    The GCC developers would like to thank the numerous people that have
   2189    contributed new features, improvements, bug fixes, and other changes as
   2190    well as test results to GCC. This [9]amazing group of volunteers is
   2191    what makes GCC successful.
   2192 
   2193    For additional information about GCC please refer to the [10]GCC
   2194    project web site or contact the [11]GCC development mailing list.
   2195 
   2196    To obtain GCC please use [12]our mirror sites or [13]our version
   2197    control system.
   2198 
   2199 
   2200     For questions related to the use of GCC, please consult these web
   2201     pages and the [14]GCC manuals. If that fails, the
   2202     [15]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   2203     web pages and the development of GCC are welcome on our developer
   2204     list at [16]gcc (a] gcc.gnu.org. All of [17]our lists have public
   2205     archives.
   2206 
   2207    Copyright (C) [18]Free Software Foundation, Inc. Verbatim copying and
   2208    distribution of this entire article is permitted in any medium,
   2209    provided this notice is preserved.
   2210 
   2211    These pages are [19]maintained by the GCC team. Last modified
   2212    2024-06-20.
   2213 
   2214 References
   2215 
   2216    1. https://gcc.gnu.org/gcc-12/changes.html
   2217    2. https://gcc.gnu.org/onlinedocs/12.4.0/
   2218    3. https://gcc.gnu.org/gcc-12/changes.html
   2219    4. https://gcc.gnu.org/onlinedocs/12.3.0/
   2220    5. https://gcc.gnu.org/gcc-12/changes.html
   2221    6. https://gcc.gnu.org/onlinedocs/12.2.0/
   2222    7. https://gcc.gnu.org/gcc-12/changes.html
   2223    8. https://gcc.gnu.org/onlinedocs/12.1.0/
   2224    9. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Contributors.html
   2225   10. https://gcc.gnu.org/index.html
   2226   11. mailto:gcc (a] gcc.gnu.org
   2227   12. https://gcc.gnu.org/mirrors.html
   2228   13. https://gcc.gnu.org/git.html
   2229   14. https://gcc.gnu.org/onlinedocs/
   2230   15. mailto:gcc-help (a] gcc.gnu.org
   2231   16. mailto:gcc (a] gcc.gnu.org
   2232   17. https://gcc.gnu.org/lists.html
   2233   18. https://www.fsf.org/
   2234   19. https://gcc.gnu.org/about.html
   2235 ======================================================================
   2236 http://gcc.gnu.org/gcc-12/changes.html
   2237 
   2238                              GCC 12 Release Series
   2239                         Changes, New Features, and Fixes
   2240 
   2241    This page is a "brief" summary of some of the huge number of
   2242    improvements in GCC 12. You may also want to check out our [1]Porting
   2243    to GCC 12 page and the [2]full GCC documentation.
   2244 
   2245 Caveats
   2246 
   2247      * An ABI incompatibility between C and C++ when passing or returning
   2248        by value certain aggregates containing zero width bit-fields has
   2249        been discovered on various targets. As mentioned in [3]PR102024,
   2250        since the [4]PR42217 fix in GCC 4.5 the C++ front-end has been
   2251        removing zero width bit-fields from the internal representation of
   2252        the aggregates after the layout of those aggregates, but the C
   2253        front-end kept them, so passing e.g. struct S { float a; int : 0;
   2254        float b; } or struct T { float c; int : 0; } by value could differ
   2255        between C and C++. Starting with GCC 12 the C++ front-end no longer
   2256        removes those bit-fields from the internal representation and per
   2257        clarified psABI some targets have been changed, so that they either
   2258        ignore those bit-fields in the argument passing by value decisions
   2259        in both C and C++, or they always take them into account. x86-64,
   2260        ARM and AArch64 will always ignore them (so there is a C ABI
   2261        incompatibility between GCC 11 and earlier with GCC 12 or later),
   2262        PowerPC64 ELFv2 and S/390 always take them into account (so there
   2263        is a C++ ABI incompatibility, GCC 4.4 and earlier compatible with
   2264        GCC 12 or later, incompatible with GCC 4.5 through GCC 11). RISC-V
   2265        has changed the handling of these already starting with GCC 10. As
   2266        the ABI requires, MIPS takes them into account handling function
   2267        return values so there is a C++ ABI incompatibility with GCC 4.5
   2268        through 11. For function arguments on MIPS, refer to [5]the MIPS
   2269        specific entry. GCC 12 on the above targets will report such
   2270        incompatibilities as warnings or other diagnostics unless
   2271        -Wno-psabi is used.
   2272      * C: Computed gotos require a pointer type now.
   2273      * C++: Two non-standard std::pair constructors have been deprecated.
   2274        These allowed the use of an rvalue and a literal 0 to construct a
   2275        pair containing a move-only type and a pointer. The nullptr keyword
   2276        should be used to initialize the pointer member instead of a
   2277        literal 0, as this is portable to other C++ implementations.
   2278      * The configuration option --enable-libstdcxx-allocator no longer
   2279        supports the bitmap, mt, and pool arguments. Those configurations
   2280        had been broken for some time.
   2281      * D: Building and bootstrapping GDC, the D compiler, now requires a
   2282        working GDC (GCC version 9.1 or later) and D runtime library,
   2283        libphobos, as the D front end is written in D. On some targets,
   2284        libphobos isn't enabled by default, but compiles and works if
   2285        --enable-libphobos is used. Other targets may require a more recent
   2286        version of GCC to bootstrap. Specifics are documented for affected
   2287        targets in the [6]Installing GCC manual.
   2288      * Fortran: OpenMP code using the omp_lib.h include file can no longer
   2289        be compiled with -std=f95 but now requires at least -std=f2003.
   2290        Alternatively, use the omp_lib module, which still supports
   2291        -std=f95 and is recommended to be used instead in general.
   2292      * OpenMP offloading to Intel MIC has been deprecated and will be
   2293        removed in a future release.
   2294      * The cr16 target with the cr16-*-* configuration has been obsoleted
   2295        and will be removed in a future release.
   2296      * The hppa[12]*-*-hpux10* and hppa[12]*-*-hpux11* configurations
   2297        targeting 32-bit PA-RISC with HP-UX have been obsoleted and will be
   2298        removed in a future release.
   2299      * The m32c*-*-rtems* configuration has been obsoleted and will be
   2300        removed in a future release.
   2301      * The support for the m32r-*-linux*, m32rle-*-linux*,
   2302        m68k*-*-openbsd* and vax-*-openbsd* configurations has been
   2303        removed.
   2304      * STABS: Support for emitting the STABS debugging format is
   2305        deprecated and will be removed in the next release. All ports now
   2306        default to emit DWARF (version 2 or later) debugging info or are
   2307        obsoleted.
   2308      * The optimization level -Ofast now implies
   2309        -fno-semantic-interposition.
   2310 
   2311 [7]General Improvements
   2312 
   2313      * Vectorization is enabled at -O2 which is now equivalent to what
   2314        would have been -O2 -ftree-vectorize -fvect-cost-model=very-cheap
   2315        in the past. Note that the default vectorizer cost model has been
   2316        changed; it used to behave as if -fvect-cost-model=cheap had been
   2317        specified.
   2318      * GCC now supports the [8]ShadowCallStack sanitizer, which can be
   2319        enabled using the command-line option
   2320        [9]-fsanitize=shadow-call-stack. This sanitizer currently only
   2321        works on AArch64 targets and it requires an environment in which
   2322        all code has been compiled with -ffixed-r18. Its primary initial
   2323        user is the Linux kernel.
   2324 
   2325 [10]New Languages and Language specific improvements
   2326 
   2327      * OpenMP
   2328           + OpenMP 5.0 support has been extended: The close map modifier
   2329             and the affinity clause are now supported. In addition,
   2330             Fortran gained the following features which were available in
   2331             C and C++ before: declare variant is now available, depobj,
   2332             mutexinoutset and iterator can now also be used with the
   2333             depend clause, defaultmap has been updated for OpenMP 5.0, and
   2334             the loop directive and combined directives involving the
   2335             master directive have been added.
   2336           + The following OpenMP 5.1 features have been added: support for
   2337             expressing OpenMP directives as C++ 11 attributes, the masked
   2338             and scope constructs, the nothing and error directives, and
   2339             using primary with the proc_bind clause and OMP_PROC_BIND
   2340             environment variable, the reproducible and unconstrained
   2341             modifiers to the order clause, and, for C/C++ only, the align
   2342             and allocator modifiers to the allocate clause and the atomic
   2343             extensions are now available. The OMP_PLACE environment
   2344             variable supports the OpenMP 5.1 features. In addition, the
   2345             OMP_NUM_TEAMS and OMP_TEAMS_THREAD_LIMIT environment variables
   2346             and their associated API routines are now supported as well as
   2347             the memory-allocation routines added for Fortran and extended
   2348             for C/C++ in OpenMP 5.1. In Fortran code, strictly structured
   2349             blocks can be used.
   2350           + The [11]OpenMP Implementation Status can be found in the
   2351             libgomp manual.
   2352      * Version 2.6 of the [12]OpenACC specification continues to be
   2353        maintained and improved in the C, C++ and Fortran compilers. See
   2354        the [13]implementation status section on the OpenACC wiki page and
   2355        the [14]run-time library documentation for further information. In
   2356        addition to general performance tuning and bug fixing, new features
   2357        include:
   2358           + OpenACC worker parallelism for [15]AMD GPUs (already for a
   2359             long time supported for [16]Nvidia GPUs).
   2360           + Data privatization/sharing at the OpenACC gang level.
   2361           + Considerable improvements for the experimental OpenACC
   2362             'kernels' decomposition ([17]--param
   2363             openacc-kernels=decompose).
   2364           + A new warning flag [18]-Wopenacc-parallelism to warn about
   2365             potentially suboptimal choices related to OpenACC parallelism.
   2366      * The offload target code generation for OpenMP and OpenACC can now
   2367        be better adjusted using the new [19]-foffload-options= flag and
   2368        the pre-existing but now documented [20]-foffload= flag.
   2369 
   2370   [21]Ada
   2371 
   2372      * Ada 2022
   2373           + Added the -gnat2022 flag to indicate strict Ada 2022
   2374             compliance. The old -gnat2020 flag is now deprecated.
   2375           + Support for Big Numbers (Annex G) has seen continuous
   2376             improvements. It is now considered complete. It is compatible
   2377             with SPARK, i.e. can be used from SPARK code.
   2378           + Continuous improvements to the Ada 2022 standard since GCC 11.
   2379           + Greatly improved compile time support. More functions can now
   2380             have the with Static aspect and can be used in more contexts.
   2381      * Ada 2022 extensions. The use of the -gnatX flag is necessary to
   2382        access these features as they are not considered stable or
   2383        standard.
   2384           + Fixed lower bound for unconstrained arrays.
   2385                o type Matrix is array (Natural range 0 .. <>, Natural
   2386                  range 0 .. <>) of Integer; is now valid.
   2387                o Subtypes can also specify a lower bound: subtype String_1
   2388                  is String (1 .. <>);. Boundaries from slices will "slide"
   2389                  to the correct lower bound of the subtype.
   2390           + Generalized Object.Operand notation. The following code is now
   2391             valid V.Add_Element(42);, with V being a vector, for example.
   2392           + Additional when constructs. Keywords return, goto and raise
   2393             can now use when in addition to the existing exit when. The
   2394             following expression is therefore now valid raise
   2395             Constraint_Error with "Element is null" when Element = null;
   2396           + Pattern matching
   2397                o The case statement has been extended to cover records and
   2398                  arrays as well as finer grained casing on scalar types.
   2399                  In the future it is expected to provide more compile time
   2400                  guarantees when accessing discriminated fields. Case
   2401                  exhaustion is supported for pattern matching. An example
   2402                  would be
   2403 type Sign is (Neg, Zero, Pos);
   2404 
   2405 function Multiply (S1, S2 : Sign) return Sign is
   2406   (case (S1, S2) is
   2407      when (Neg, Neg) | (Pos, Pos) => Pos,
   2408      when (Zero, <>) | (<>, Zero) => Zero,
   2409      when (Neg, Pos) | (Pos, Neg) => Neg);
   2410 
   2411      * gnatfind and gnatxref, which were already deprecated, have been
   2412        removed.
   2413      * Greatly expanded code covered by contracts. Thanks to this work,
   2414        there are now several Ada standard libraries fully proven in SPARK
   2415        which means they have no runtime nor logical errors. They are
   2416        mostly numeric and string handling libraries.
   2417      * Enable return-slot optimization for Pure functions.
   2418      * General optimizations, improvements and additions to the standard
   2419        library. Performance, correctness and in some cases stability was
   2420        improved. Memory pools have also seen some minor enhancements.
   2421      * Improvements to embedded-RTOS targets such as RTEMS, VxWorks and
   2422        QNX. Older targets were removed or cleaned.
   2423      * Added some [22]hardening features.
   2424 
   2425   [23]C family
   2426 
   2427      * Support for __builtin_shufflevector compatible with the clang
   2428        language extension was added.
   2429      * Support for attribute unavailable was added.
   2430      * A new built-in function, __builtin_assoc_barrier, was added. It can
   2431        be used to inhibit re-association of floating-point expressions.
   2432      * Support for __builtin_dynamic_object_size compatible with the clang
   2433        language extension was added.
   2434      * New warnings:
   2435           + [24]-Wbidi-chars warns about potentially misleading UTF-8
   2436             bidirectional control characters. The default is
   2437             -Wbidi-chars=unpaired ([25]PR103026)
   2438           + [26]-Warray-compare warns about comparisons between two
   2439             operands of array type ([27]PR97573)
   2440      * Enhancements to existing warnings:
   2441           + [28]-Wattributes has been extended so that it's possible to
   2442             use -Wno-attributes=ns::attr or -Wno-attributes=ns:: to
   2443             suppress warnings about unknown scoped attributes (in C++11
   2444             and C2X). Similarly, #pragma GCC diagnostic ignored_attributes
   2445             "vendor::attr" can be used to achieve the same effect
   2446             ([29]PR101940)
   2447 
   2448   [30]C
   2449 
   2450      * Some new features from the upcoming C2X revision of the ISO C
   2451        standard are supported with -std=c2x and -std=gnu2x. Some of these
   2452        features are also supported as extensions when compiling for older
   2453        language versions. In addition to the features listed, some
   2454        features previously supported as extensions and now added to the C
   2455        standard are enabled by default in C2X mode and not diagnosed with
   2456        -std=c2x -Wpedantic.
   2457           + Digit separators (as in C++) are supported for C2X.
   2458           + The #elifdef and #elifndef preprocessing directives are now
   2459             supported.
   2460           + The printf and scanf format checking with [31]-Wformat now
   2461             supports the %b format specified by C2X for binary integers,
   2462             and the %B format recommended by C2X for printf.
   2463 
   2464   [32]C++
   2465 
   2466      * Several C++23 features have been implemented:
   2467           + [33]P1938R3, if consteval ([34]PR100974)
   2468           + [35]P0849R8, auto(x): decay-copy in the language
   2469             ([36]PR103049)
   2470           + [37]P2242R3, Non-literal variables (and labels and gotos) in
   2471             constexpr functions ([38]PR102612)
   2472           + [39]P2334R1, Support for preprocessing directives elifdef and
   2473             elifndef ([40]PR102616)
   2474           + [41]P2360R0, Extend init-statement to allow alias-declaration
   2475             ([42]PR102617)
   2476           + [43]P2128R6, Multidimensional subscript operator
   2477           + [44]DR 2397, auto specifier for pointers and references to
   2478             arrays ([45]PR100975)
   2479      * Several C++ Defect Reports have been resolved, e.g.:
   2480           + [46]DR 960, Covariant functions and lvalue/rvalue references
   2481           + [47]DR 1227, Mixing immediate and non-immediate contexts in
   2482             deduction failure
   2483           + [48]DR 1315, Restrictions on non-type template arguments in
   2484             partial specializations
   2485           + [49]DR 2082, Referring to parameters in unevaluated operands
   2486             of default arguments
   2487           + [50]DR 2351, void{}
   2488           + [51]DR 2374, Overly permissive specification of enum
   2489             direct-list-initialization
   2490           + [52]DR 2397, auto specifier for pointers and references to
   2491             arrays
   2492           + [53]DR 2446, Questionable type-dependency of concept-ids
   2493      * New command-line option -fimplicit-constexpr can be used to make
   2494        inline functions implicitly constexpr ([54]git)
   2495      * New command-line option -ffold-simple-inlines can be used to fold
   2496        calls to certain trivial inline functions (currently std::move,
   2497        std::forward, std::addressof and std::as_const). In contrast to
   2498        inlining such calls, folding means that no intermediate code or
   2499        debug information will be generated for them; this minimizes the
   2500        abstraction penalty incurred for using these functions versus using
   2501        the fundamental operations from which they're defined (e.g.
   2502        std::move versus static_cast). This flag is enabled by default when
   2503        -fno-inline is not active.
   2504      * Deduction guides can be declared at class scope ([55]PR79501)
   2505      * [56]-Wuninitialized warns about using uninitialized variables in
   2506        member initializer lists ([57]PR19808)
   2507      * [58]-Wint-in-bool-context is now disabled when instantiating a
   2508        template ([59]git)
   2509      * Stricter checking of attributes on friend declarations: if a friend
   2510        declaration has an attribute, that declaration must be a
   2511        definition. Moreover, a C++11 attribute cannot appear in the middle
   2512        of the decl-specifier-seq. ([60]PR99032)
   2513      * New warning options for C++ language mismatches:
   2514        -Wc++11-extensions, -Wc++14-extensions, -Wc++17-extensions,
   2515        -Wc++20-extensions, and -Wc++23-extensions. They are enabled by
   2516        default and can be used to control existing pedwarns about
   2517        occurrences of new C++ constructs in code using an old C++ standard
   2518        dialect.
   2519      * New warning [61]-Wmissing-requires warns about missing requires
   2520        ([62]git)
   2521      * The existing std::is_constant_evaluated in if warning was extended
   2522        to warn in more cases ([63]PR100995)
   2523      * [64]-Waddress has been enhanced so that it now warns about, for
   2524        instance, comparing the address of a nonstatic member function to
   2525        null ([65]PR102103)
   2526      * Errors about narrowing are no longer hidden if they occur in system
   2527        headers
   2528      * Ordered comparison of null pointers is now rejected ([66]PR99701)
   2529      * Anonymous structs with bases are now rejected ([67]git)
   2530      * The compiler rejects taking the address of an immediate member
   2531        function ([68]PR102753)
   2532      * The compiler has support for C++20
   2533        __cpp_lib_is_pointer_interconvertible and
   2534        __cpp_lib_is_layout_compatible to help the C++ library implement
   2535        [69]P0466, Layout-compatibility and Pointer-interconvertibility
   2536        Traits ([70]PR101539)
   2537      * Memory usage of constraint subsumption has been improved
   2538        ([71]PR100828)
   2539      * constinit thread_local variables are optimized better
   2540        ([72]PR101786)
   2541      * Support for C++17 std::hardware_destructive_interference_size was
   2542        added, along with the [73]-Winterference-size warning ([74]git)
   2543      * Many bugs in the CTAD handling have been fixed ([75]PR101344,
   2544        [76]PR101883, [77]PR89062, [78]PR101233, [79]PR88252, [80]PR86439,
   2545        [81]PR98832, [82]PR102933 ...)
   2546      * Two-stage name lookup for dependent operator expressions has been
   2547        corrected ([83]PR51577)
   2548      * Several issues with constrained variable templates have been fixed
   2549        ([84]PR98486)
   2550      * The compiler performs less instantiating when doing speculative
   2551        constant evaluation ([85]git)
   2552      * Various diagnostic improvements; e.g., a more precise caret
   2553        location for pointer-to-member expressions
   2554      * The new -fconstexpr-fp-except flag allows IEC559 floating point
   2555        exceptions in constant-expressions.
   2556 
   2557     [86]Runtime Library (libstdc++)
   2558 
   2559      * Improved experimental C++20 support, including:
   2560           + std::vector, std::basic_string, std::optional, and
   2561             std::variant can be used in constexpr functions.
   2562           + std::make_shared for arrays with default initialization, and
   2563             std::atomic<std::shared_ptr<T>>.
   2564           + Layout-compatibility and pointer-interconvertibility traits.
   2565      * Improved experimental C++23 support, including:
   2566           + Monadic operations for std::optional.
   2567           + std::expected
   2568           + std::move_only_function
   2569           + <spanstream>
   2570           + std::basic_string::resize_and_overwrite
   2571           + std::unique_ptr can be used in constexpr functions.
   2572           + <stacktrace> (not built by default, requires linking to an
   2573             extra library).
   2574           + <stdatomic.h>
   2575           + std::invoke_r
   2576           + constexpr std::type_info::operator==
   2577 
   2578   [87]D
   2579 
   2580      * New features:
   2581           + Support for the D programming language has been updated to
   2582             version 2.100.1 of the language and run-time library. Full
   2583             changelog for this release and previous releases can be found
   2584             on the [88]dlang.org website.
   2585           + On supported targets, the __traits(compiles) expression can
   2586             now be used to determine whether a target-specific built-in is
   2587             available without error during CTFE ([89]PR101127).
   2588           + Functions annotated with pragma(inline, true) are now compiled
   2589             into every module where they are used from ([90]PR106563).
   2590           + Partial support for directly importing C99 sources into a D
   2591             compilation ([91]ImportC) has been added to the language. A
   2592             notable missing feature is support for preprocessing C
   2593             imports, which can be worked around by preprocessing all C
   2594             sources used for importing ahead of time.
   2595      * New language options:
   2596           + -fcheck=, enables or disables the code generation of specific
   2597             run-time contract checks.
   2598           + -fcheckaction=, controls the run-time behavior on an assert,
   2599             array bounds check, or final switch contract failure. The
   2600             default is -fcheckaction=throw.
   2601           + -fdump-c++-spec=, dumps all compiled extern(C++) declarations
   2602             as C++ code to the given file. The supplementary option
   2603             -fdump-c++-spec-verbose turns on emission of comments for
   2604             ignored declarations in the generated spec.
   2605           + -fextern-std=, controls which C++ standard extern(C++)
   2606             declarations are compiled to be compatible with. The default
   2607             is -fextern-std=c++17.
   2608           + -fpreview=, added to enable upcoming D language features in
   2609             the compiler.
   2610           + -frevert=, added to revert D language changes to support older
   2611             D codebases that need more time to transition.
   2612           + -fsave-mixins=, saves mixins expanded at compile-time to a
   2613             file.
   2614      * Deprecated and removed features:
   2615           + The -Wtemplates compiler switch has been removed, as it had
   2616             been superceded by -ftransition=templates, which more
   2617             accurately reports on which templates have been instantiated.
   2618           + The -ftransition=dip25 and -ftransition=dip1000 compiler
   2619             switches have been renamed to -fpreview=dip25 and
   2620             -fpreview=dip1000.
   2621 
   2622   [92]Fortran
   2623 
   2624      * WG5/N1942, "TS 29113 Further Interoperability of Fortran with C",
   2625        is now fully supported. In addition to implementing previously
   2626        missing functionality, such as support for character arguments of
   2627        length greater than one in functions marked bind(c) and gaps in the
   2628        handling for assumed-rank arrays, numerous other bugs have been
   2629        fixed, and an extensive set of new conformance test cases has been
   2630        added.
   2631      * GCC 12 now uses OPERATION as the name of the function to the
   2632        CO_REDUCE intrinsic for the pairwise reduction, thus conforming to
   2633        the Fortran 2018 standard. Previous versions used OPERATOR which
   2634        conforms to TS 18508.
   2635      * On POWER systems which support it, the -mabi=ieeelongdouble option
   2636        now selects the IEEE 128-bit floating point format for
   2637        REAL(KIND=16). R16_IBM and R16_IEEE have been added to the
   2638        -fconvert option, the CONVERT specifier of the OPEN statement and
   2639        the GFORTRAN_CONVERT_UNIT environment variable.
   2640 
   2641   [93]Go
   2642 
   2643      * GCC 12 provides a complete implementation of the Go 1.18 user
   2644        packages.
   2645      * Although Go 1.18 includes support for generic programming, that
   2646        support is not yet available in GCC.
   2647 
   2648 [94]libgccjit
   2649 
   2650      * The libgccjit API gained 30 new entry points:
   2651           + 17 new "reflection" entry points for querying functions and
   2652             types ([95]LIBGCCJIT_ABI_16)
   2653           + [96]gcc_jit_lvalue_set_tls_model for supporting thread-local
   2654             variables ([97]LIBGCCJIT_ABI_17)
   2655           + [98]gcc_jit_lvalue_set_link_section for setting the link
   2656             section of global variables, analogous to
   2657             [99]__attribute__((section(".section")))
   2658             ([100]LIBGCCJIT_ABI_18)
   2659           + 4 new entry points for initializing global variables and
   2660             creating constructors for rvalues ([101]LIBGCCJIT_ABI_19)
   2661           + Support for sized integer types, including 128-bit integers
   2662             and helper functions for such types ([102]LIBGCCJIT_ABI_20)
   2663           + [103]gcc_jit_context_new_bitcast for reinterpreting the bits
   2664             of an rvalue as a different type ([104]LIBGCCJIT_ABI_21)
   2665           + [105]gcc_jit_lvalue_set_register_name for setting a specific
   2666             register for a variable ([106]LIBGCCJIT_ABI_22)
   2667           + [107]gcc_jit_context_set_bool_print_errors_to_stderr
   2668             ([108]LIBGCCJIT_ABI_23)
   2669           + 2 new entry points for setting the alignment of a variable
   2670             ([109]LIBGCCJIT_ABI_24)
   2671      * libgccjit has gained support for the use of various atomic builtins
   2672        ([110]PR96066, [111]PR96067)
   2673      * [112]gcc_jit_context_new_cast is now able to handle truncation and
   2674        extension between different integer types ([113]PR95498)
   2675 
   2676 [114]New Targets and Target Specific Improvements
   2677 
   2678   [115]AArch64 & arm
   2679 
   2680      * Newer revisions of the Arm Architecture are supported as arguments
   2681        to the -march option: armv8.7-a, armv8.8-a, armv9-a.
   2682      * The Arm Cortex-A510 CPU is now supported through the cortex-a510
   2683        argument to the -mcpu and -mtune options.
   2684      * GCC can now auto-vectorize operations performing sign-differing
   2685        dot-product operations, taking advantage of instructions in the
   2686        Advanced SIMD (AArch64/AArch32) and SVE (AArch64) instruction sets.
   2687 
   2688   [116]AArch64
   2689 
   2690      * A number of new CPUs are supported through the -mcpu and -mtune
   2691        options (GCC identifiers in parentheses).
   2692           + Ampere-1 (ampere1).
   2693           + Arm Cortex-A710 (cortex-a710).
   2694           + Arm Cortex-X2 (cortex-x2).
   2695      * The 64-byte atomic load/store intrinsics to accelerator memory from
   2696        the [117]2020 Arm Architecture extensions are supported through the
   2697        +ls64 option extension.
   2698      * Initial code generation support is supported for hardware
   2699        instructions used to accelerate the memcpy,memmove and memset
   2700        standard functions. These instructions can be generated when
   2701        compiling with the +mopsoption extension.
   2702      * The ACLE Advanced SIMD intrinsics accessible through the arm_neon.h
   2703        header have been significantly reimplemented and generate
   2704        higher-performing code than previous GCC versions.
   2705      * The option -mtune=neoverse-512tvb is added to tune for Arm Neoverse
   2706        cores that have a total vector bandwidth of 512 bits. Please refer
   2707        to the documentation for more details.
   2708 
   2709   [118]AMD Radeon (GCN)
   2710 
   2711      * Debug experience with ROCGDB has been improved.
   2712      * Support for the type __int128_t/integer(kind=16) was added.
   2713      * For offloading, the limitation of using only one wavefront per
   2714        compute unit (CU) has been lifted. Up to 40 workgroups per CU and
   2715        16 wavefronts per workgroup are supported (up to a limit of 40
   2716        wavefronts in total, per CU). Additionally, the number of used
   2717        wavefronts and workgroups was tuned for performance.
   2718 
   2719   [119]arm
   2720 
   2721      * Support is added for accessing the stack canary value via the TLS
   2722        register through the -fstack-protector-guard=tls and
   2723        -mstack-protector-guard-offset= options. This intended for use in
   2724        Linux kernel development. Please refer to the documentation for
   2725        more details.
   2726 
   2727   [120]BPF
   2728 
   2729      * Support for CO-RE (compile-once, run-everywhere) has been added to
   2730        the BPF back end. CO-RE allows to compile portable BPF programs
   2731        that are able to run among different versions of the Linux kernel.
   2732 
   2733   [121]IA-32/x86-64
   2734 
   2735      * New ISA extension support for Intel AVX512-FP16 was added.
   2736        AVX512-FP16 intrinsics are available via the -mavx512fp16 compiler
   2737        switch.
   2738      * For both C and C++ the _Float16 type is supported on x86 systems
   2739        with SSE2 enabled. Without {-mavx512fp16}, all operations will be
   2740        emulated in software and float instructions.
   2741      * Mitigation against straight line speculation (SLS) for function
   2742        return and indirect jump is supported via
   2743        -mharden-sls=[none|all|return|indirect-jmp].
   2744      * Add CS prefix to call and jmp to indirect thunk with branch target
   2745        in r8-r15 registers via -mindirect-branch-cs-prefix.
   2746      * Always use global offset table (GOT) to access external data and
   2747        function symbols when the new -mno-direct-extern-access
   2748        command-line option is specified.
   2749 
   2750   [122]LoongArch
   2751 
   2752      * Support for the LoongArch architecture instruction set has been
   2753        added.
   2754      * The Loongson CPU codename LA464 and LoongArch 64-bit generic CPU
   2755        codename loongarch64 are supported through the -march= and -mtune=
   2756        options (GCC identifiers in parentheses).
   2757           + Loongson LA464 core (la464).
   2758           + LoongArch 64-bit generic core (loongarch64).
   2759 
   2760   [123]MIPS
   2761 
   2762      * The ABI passing arguments containing zero-width fields (for
   2763        example, C/C++ zero-width bit-fields, GNU C/C++ zero-length arrays,
   2764        and GNU C empty structs) has changed. Now a zero-width field will
   2765        not prevent an aligned 64-bit floating-point field next to it from
   2766        being passed through FPR. This is compatible with LLVM, but
   2767        incompatible with previous GCC releases. GCC 12 on MIPS will report
   2768        such incompatibilities as an inform unless -Wno-psabi is used.
   2769      * The ABI returning values containing C++17 empty bases has changed.
   2770        Now an empty base will not prevent an aggregate containing only one
   2771        or two floating-point fields from being returned through FPR. This
   2772        is compatible with GCC 6 and earlier, but incompatible with GCC 7
   2773        through 11. GCC 12 on MIPS will report such incompatibilities as an
   2774        inform unless -Wno-psabi is used.
   2775 
   2776   [124]NVPTX
   2777 
   2778      * The -march flag has been added. The -misa flag is now considered an
   2779        alias of the -march flag.
   2780      * Support for PTX ISA target architectures sm_53, sm_70, sm_75 and
   2781        sm_80 has been added. These can be specified using the -march flag.
   2782      * The default PTX ISA target architecture has been set back to sm_30,
   2783        to fix support for sm_30 boards.
   2784      * The -march-map flag has been added. The -march-map value will be
   2785        mapped to an valid -march flag value. For instance,
   2786        -march-map=sm_50 maps to -march=sm_35. This can be used to specify
   2787        that generated code is to be executed on a board with at least some
   2788        specific compute capability, without having to know the valid
   2789        values for the -march flag.
   2790      * The -mptx flag has been added to specify the PTX ISA version for
   2791        the generated code; permitted values are 3.1 (matches previous GCC
   2792        versions), 6.0, 6.3, and 7.0. If not specified, the used version is
   2793        the minimal version required for -march but at least 6.0.
   2794      * An mptx-3.1 multilib was added. This allows using older drivers
   2795        which do not support PTX ISA version 6.0.
   2796      * The new __PTX_SM__ predefined macro allows code to check the PTX
   2797        ISA target architecture being targeted by the compiler.
   2798      * The new __PTX_ISA_VERSION_MAJOR__ and __PTX_ISA_VERSION_MINOR__
   2799        predefined macros allows code to check the PTX ISA version being
   2800        targeted by the compiler.
   2801 
   2802   [125]PowerPC / PowerPC64 / RS6000
   2803 
   2804      * The internal implementation of Power's target-specific built-in
   2805        functions has been rewritten to be easier and less error-prone to
   2806        maintain. Every attempt has been made to ensure that the new
   2807        behavior matches the old behavior, but inevitably some bugs can be
   2808        expected. Please [126]report any problems.
   2809      * The built-in functions __builtin_get_texasr, __builtin_get_texasru,
   2810        __builtin_get_tfhar, __builtin_get_tfiar, __builtin_set_texasr,
   2811        __builtin_set_texasru, __builtin_set_tfhar, and __builtin_set_tfiar
   2812        now behave as documented in all supported configurations. On prior
   2813        releases, the arguments and return values of these functions were
   2814        treated as unsigned long long instead of as unsigned long, when the
   2815        options -m32 -mpowerpc64 were in effect.
   2816      * The overloaded built-in functions vec_cntlz_lsbb and vec_cnttz_lsbb
   2817        now behave as documented. On prior releases, these built-in
   2818        functions had incorrect semantics on little-endian targets.
   2819 
   2820   [127]PRU
   2821 
   2822      * The [128]__regio_symbol variable qualifier has been added. It
   2823        allows easier access in C programs to the __R30 and __R31 CPU I/O
   2824        registers.
   2825 
   2826   [129]RISC-V
   2827 
   2828      * The default ISA spec version was bumped to 20191213; see [130]this
   2829        announcement for details.
   2830      * New ISA extension support for zba, zbb, zbc, zbs was added.
   2831      * New ISA extension support for vector and scalar crypto was added,
   2832        only support architecture testing macro and -march= parsing.
   2833      * The option -mtune=thead-c906 is added to tune for T-HEAD c906
   2834        cores.
   2835      * libstdc++ no longer attempts to detect built-in atomics.
   2836        Distributions that have out-of-tree workarounds for -latomic should
   2837        check their ABIs again.
   2838 
   2839 [131]Operating Systems
   2840 
   2841 [132]Improvements to Static Analyzer
   2842 
   2843      * The analyzer has gained a
   2844        [133]-Wanalyzer-use-of-uninitialized-value warning, similar to
   2845        [134]-Wuninitialized and [135]-Wmaybe-uninitialized, but based on
   2846        an interprocedural path-sensitive analysis ([136]PR95006).
   2847        Such warnings are not disabled by the new
   2848        [137]-ftrivial-auto-var-init (see below), as the latter is
   2849        considered a mitigation option.
   2850      * [138]-Wanalyzer-write-to-const and
   2851        [139]-Wanalyzer-write-to-string-literal will now check for
   2852        [140]__attribute__ ((access, ....)) on calls to externally-defined
   2853        functions, and complain about read-only regions pointed to by
   2854        arguments marked with a write_only or read_write attribute
   2855        ([141]PR104793).
   2856      * The analyzer's "taint" mode, activated by
   2857        [142]-fanalyzer-checker=taint (in addition to [143]-fanalyzer), has
   2858        gained four new taint-based warnings:
   2859           + [144]-Wanalyzer-tainted-allocation-size for e.g.
   2860             attacker-controlled malloc and alloca,
   2861           + [145]-Wanalyzer-tainted-divisor for detecting where an
   2862             attacker can inject a divide-by-zero,
   2863           + [146]-Wanalyzer-tainted-offset for attacker-controlled pointer
   2864             offsets,
   2865           + [147]-Wanalyzer-tainted-size for attacker-controlled values
   2866             being used as a size parameter to calls to memset or to
   2867             functions marked with [148]__attribute__ ((access, ....)).
   2868        The existing [149]-Wanalyzer-tainted-array-index has been reworded
   2869        to talk about "attacker-controlled" rather than "tainted" values,
   2870        for consistency with the new warnings.
   2871        A new [150]__attribute__ ((tainted_args)) has been added to the C
   2872        and C++ front ends, usable on functions, and on function pointer
   2873        callback fields in structs. The analyzer's taint mode will treat
   2874        all parameters and buffers pointed to by parameters of such
   2875        functions as being attacker-controlled, such as for annotating
   2876        system calls in an operating system kernel as being an "attack
   2877        surface".
   2878      * The analyzer now respects [151]__attribute__((const)): it will
   2879        treat such functions as returning the same value when given the
   2880        same inputs ([152]PR104434), and as having no side effects
   2881        ([153]PR104576).
   2882      * The analyzer is now able to split its analysis into multiple
   2883        execution paths in places where there isn't a split in the control
   2884        flow graph. For example, it now handles realloc calls by splitting
   2885        the execution path into three possible outcomes for the call:
   2886           + failure, returning NULL
   2887           + success, growing the buffer in-place without moving it
   2888           + success, allocating a new buffer, copying the content of the
   2889             old buffer to it, and freeing the old buffer
   2890      * The analyzer's interprocedural path exploration logic is now able
   2891        to track calls through function pointers.
   2892      * The analyzer now makes the assumption that if we know PTR is
   2893        non-NULL, then (PTR + OFFSET) is also non-NULL. This isn't strictly
   2894        true, but eliminates false positives in practice ([154]PR101962).
   2895      * The analyzer has gained some initial support for inline assembler
   2896        code. This is extremely limited, and is purely to help suppress
   2897        false positives when analyzing the Linux kernel, which makes heavy
   2898        use of inline assembler ([155]PR101570).
   2899      * The way the analyzer tracks the state of memory along an execution
   2900        path has been improved in various ways for GCC 12:
   2901           + An optimization for representing bulk updates to memory (e.g.
   2902             zero fills) has been removed as it never worked well. In GCC
   2903             12 it has been replaced with a simpler and more accurate
   2904             approach, eliminating many false positives ([156]PR95006).
   2905           + Various optimizations have been added, speeding up the
   2906             analysis on a particularly problematic source file from 4
   2907             minutes down to 17 seconds ([157]PR104943, [158]PR104954, and
   2908             [159]PR104955).
   2909           + The analyzer now tracks the sizes of dynamically-allocated
   2910             regions, both on the heap (via malloc etc) and stack (via
   2911             alloca), though none of the analyzer warnings make use of this
   2912             yet in GCC 12.
   2913      * The analyzer's handling of switch statements has been rewritten,
   2914        fixing various bugs.
   2915 
   2916 Other significant improvements
   2917 
   2918   [160]Eliminating uninitialized variables
   2919 
   2920      * GCC can now [161]initialize all stack variables implicitly,
   2921        including padding. This is intended to eliminate all classes of
   2922        uninitialized stack variable flaws. Lack of explicit initialization
   2923        will still warn when [162]-Wuninitialized is active. For best
   2924        debugging, use of the new command-line option
   2925        [163]-ftrivial-auto-var-init=pattern can be used to fill variables
   2926        with a repeated 0xFE pattern, which tends to illuminate many bugs
   2927        (e.g. pointers receive invalid addresses, sizes and indices are
   2928        very large). For best production results, the new command-line
   2929        option [164]-ftrivial-auto-var-init=zero can be used to fill
   2930        variables with 0x00, which tends to provide a safer state for bugs
   2931        (e.g. pointers are NULL, strings are NUL filled, and sizes and
   2932        indices are 0).
   2933 
   2934   [165]Debugging formats
   2935 
   2936      * GCC can now generate debugging information in [166]CTF, a
   2937        lightweight debugging format that provides information about C
   2938        types and the association between functions and data symbols and
   2939        types. This format is designed to be embedded in ELF files and to
   2940        be very compact and simple. A new command-line option -gctf enables
   2941        the generation of CTF.
   2942      * GCC can now generate debugging information in BTF. This is a
   2943        debugging format mainly used in BPF programs and the Linux kernel.
   2944        The compiler can generate BTF for any target, when enabled with the
   2945        command-line option -gbtf
   2946 
   2947 [167]GCC 12.1
   2948 
   2949    This is the [168]list of problem reports (PRs) from GCC's bug tracking
   2950    system that are known to be fixed in the 12.1 release. This list might
   2951    not be complete (that is, it is possible that some PRs that have been
   2952    fixed are not listed here).
   2953 
   2954 [169]GCC 12.2
   2955 
   2956    This is the [170]list of problem reports (PRs) from GCC's bug tracking
   2957    system that are known to be fixed in the 12.2 release. This list might
   2958    not be complete (that is, it is possible that some PRs that have been
   2959    fixed are not listed here).
   2960 
   2961   Target Specific Changes
   2962 
   2963     LoongArch
   2964 
   2965      * The default setting of -m[check|no-check]-zero-division is changed
   2966        for optimized code. Now -mno-check-zero-division is the default for
   2967        all optimization levels but -O0 and -Og. The old behavior can be
   2968        obtained by explicitly passing -mcheck-zero-division to GCC.
   2969 
   2970 [171]GCC 12.3
   2971 
   2972   Target Specific Changes
   2973 
   2974   x86-64
   2975 
   2976      * GCC now supports AMD CPUs based on the znver4 core via
   2977        -march=znver4. The switch makes GCC consider using 512-bit vectors
   2978        when auto-vectorizing.
   2979 
   2980    This is the [172]list of problem reports (PRs) from GCC's bug tracking
   2981    system that are known to be fixed in the 12.3 release. This list might
   2982    not be complete (that is, it is possible that some PRs that have been
   2983    fixed are not listed here).
   2984 
   2985 [173]GCC 12.4
   2986 
   2987    This is the [174]list of problem reports (PRs) from GCC's bug tracking
   2988    system that are known to be fixed in the 12.4 release. This list might
   2989    not be complete (that is, it is possible that some PRs that have been
   2990    fixed are not listed here).
   2991 
   2992 
   2993     For questions related to the use of GCC, please consult these web
   2994     pages and the [175]GCC manuals. If that fails, the
   2995     [176]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   2996     web pages and the development of GCC are welcome on our developer
   2997     list at [177]gcc (a] gcc.gnu.org. All of [178]our lists have public
   2998     archives.
   2999 
   3000    Copyright (C) [179]Free Software Foundation, Inc. Verbatim copying and
   3001    distribution of this entire article is permitted in any medium,
   3002    provided this notice is preserved.
   3003 
   3004    These pages are [180]maintained by the GCC team. Last modified
   3005    2025-01-31.
   3006 
   3007 References
   3008 
   3009    1. https://gcc.gnu.org/gcc-12/porting_to.html
   3010    2. https://gcc.gnu.org/onlinedocs/index.html#current
   3011    3. https://gcc.gnu.org/PR102024
   3012    4. https://gcc.gnu.org/PR42217
   3013    5. https://gcc.gnu.org/gcc-12/changes.html#mips_zero_width_fields
   3014    6. https://gcc.gnu.org/install/specific.html
   3015    7. https://gcc.gnu.org/gcc-12/changes.html#general
   3016    8. https://clang.llvm.org/docs/ShadowCallStack.html
   3017    9. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Instrumentation-Options.html#index-fsanitize_003dshadow-call-stack
   3018   10. https://gcc.gnu.org/gcc-12/changes.html#languages
   3019   11. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/libgomp/OpenMP-Implementation-Status.html
   3020   12. https://www.openacc.org/
   3021   13. https://gcc.gnu.org/wiki/OpenACC/Implementation%20Status#status-12
   3022   14. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/libgomp/Enabling-OpenACC.html
   3023   15. https://gcc.gnu.org/gcc-12/changes.html#amdgcn
   3024   16. https://gcc.gnu.org/gcc-12/changes.html#nvptx
   3025   17. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Optimize-Options.html#index-param
   3026   18. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wopenacc-parallelism
   3027   19. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/C-Dialect-Options.html#index-foffload-options
   3028   20. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/C-Dialect-Options.html#index-foffload
   3029   21. https://gcc.gnu.org/gcc-12/changes.html#ada
   3030   22. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gnat_rm/Security-Hardening-Features.html#Security-Hardening-Features
   3031   23. https://gcc.gnu.org/gcc-12/changes.html#c-family
   3032   24. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wbidi-chars
   3033   25. https://gcc.gnu.org/PR103026
   3034   26. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Warray-compare
   3035   27. https://gcc.gnu.org/PR97573
   3036   28. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wattributes
   3037   29. https://gcc.gnu.org/PR101940
   3038   30. https://gcc.gnu.org/gcc-12/changes.html#c
   3039   31. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wformat
   3040   32. https://gcc.gnu.org/gcc-12/changes.html#cxx
   3041   33. https://wg21.link/p1938
   3042   34. https://gcc.gnu.org/PR100974
   3043   35. https://wg21.link/p0849
   3044   36. https://gcc.gnu.org/PR103049
   3045   37. https://wg21.link/p2242
   3046   38. https://gcc.gnu.org/PR102612
   3047   39. https://wg21.link/p2334
   3048   40. https://gcc.gnu.org/PR102616
   3049   41. https://wg21.link/p2360
   3050   42. https://gcc.gnu.org/PR102617
   3051   43. https://wg21.link/p2128
   3052   44. https://wg21.link/cwg2397
   3053   45. https://gcc.gnu.org/PR100975
   3054   46. https://wg21.link/cwg960
   3055   47. https://wg21.link/cwg1227
   3056   48. https://wg21.link/cwg1315
   3057   49. https://wg21.link/cwg2082
   3058   50. https://wg21.link/cwg2351
   3059   51. https://wg21.link/cwg2374
   3060   52. https://wg21.link/cwg2397
   3061   53. https://wg21.link/cwg2446
   3062   54. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=87c2080b
   3063   55. https://gcc.gnu.org/PR79501
   3064   56. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wuninitialized
   3065   57. https://gcc.gnu.org/PR19808
   3066   58. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wint-in-bool-context
   3067   59. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=3a2b12bc
   3068   60. https://gcc.gnu.org/PR99032
   3069   61. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wmissing-requires
   3070   62. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=e18e56c7
   3071   63. https://gcc.gnu.org/PR100995
   3072   64. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Waddress
   3073   65. https://gcc.gnu.org/PR102103
   3074   66. https://gcc.gnu.org/PR99701
   3075   67. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=3ead06c1
   3076   68. https://gcc.gnu.org/PR102753
   3077   69. https://wg21.link/p0466
   3078   70. https://gcc.gnu.org/PR101539
   3079   71. https://gcc.gnu.org/PR100828
   3080   72. https://gcc.gnu.org/PR101786
   3081   73. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Winterference-size
   3082   74. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=76b75018
   3083   75. https://gcc.gnu.org/PR101344
   3084   76. https://gcc.gnu.org/PR101883
   3085   77. https://gcc.gnu.org/PR89062
   3086   78. https://gcc.gnu.org/PR101233
   3087   79. https://gcc.gnu.org/PR88252
   3088   80. https://gcc.gnu.org/PR86439
   3089   81. https://gcc.gnu.org/PR98832
   3090   82. https://gcc.gnu.org/PR102933
   3091   83. https://gcc.gnu.org/PR51577
   3092   84. https://gcc.gnu.org/PR98486
   3093   85. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=1595fe44
   3094   86. https://gcc.gnu.org/gcc-12/changes.html#libstdcxx
   3095   87. https://gcc.gnu.org/gcc-12/changes.html#d
   3096   88. https://dlang.org/changelog/2.100.1.html
   3097   89. https://gcc.gnu.org/PR101127
   3098   90. https://gcc.gnu.org/PR106563
   3099   91. https://dlang.org/spec/importc.html
   3100   92. https://gcc.gnu.org/gcc-12/changes.html#fortran
   3101   93. https://gcc.gnu.org/gcc-12/changes.html#go
   3102   94. https://gcc.gnu.org/gcc-12/changes.html#jit
   3103   95. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-16
   3104   96. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/expressions.html#c.gcc_jit_lvalue_set_tls_model
   3105   97. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-17
   3106   98. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/expressions.html#c.gcc_jit_lvalue_set_link_section
   3107   99. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Common-Variable-Attributes.html#index-section-variable-attribute
   3108  100. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-18
   3109  101. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-19
   3110  102. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-20
   3111  103. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/expressions.html#c.gcc_jit_context_new_bitcast
   3112  104. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-21
   3113  105. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/expressions.html#c.gcc_jit_lvalue_set_register_name
   3114  106. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-22
   3115  107. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/contexts.html#c.gcc_jit_context_set_bool_print_errors_to_stderr
   3116  108. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-23
   3117  109. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-24
   3118  110. https://gcc.gnu.org/PR96066
   3119  111. https://gcc.gnu.org/PR96067
   3120  112. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/expressions.html#c.gcc_jit_context_new_cast
   3121  113. https://gcc.gnu.org/PR95498
   3122  114. https://gcc.gnu.org/gcc-12/changes.html#targets
   3123  115. https://gcc.gnu.org/gcc-12/changes.html#arm-targets
   3124  116. https://gcc.gnu.org/gcc-12/changes.html#aarch64
   3125  117. https://community.arm.com/arm-community-blogs/b/architectures-and-processors-blog/posts/arm-a-profile-architecture-developments-2020
   3126  118. https://gcc.gnu.org/gcc-12/changes.html#amdgcn
   3127  119. https://gcc.gnu.org/gcc-12/changes.html#arm
   3128  120. https://gcc.gnu.org/gcc-12/changes.html#bpf
   3129  121. https://gcc.gnu.org/gcc-12/changes.html#x86
   3130  122. https://gcc.gnu.org/gcc-12/changes.html#loongarch
   3131  123. https://gcc.gnu.org/gcc-12/changes.html#mips
   3132  124. https://gcc.gnu.org/gcc-12/changes.html#nvptx
   3133  125. https://gcc.gnu.org/gcc-12/changes.html#powerpc
   3134  126. https://gcc.gnu.org/bugs/
   3135  127. https://gcc.gnu.org/gcc-12/changes.html#pru
   3136  128. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Named-Address-Spaces.html#PRU-Named-Address-Spaces
   3137  129. https://gcc.gnu.org/gcc-12/changes.html#riscv
   3138  130. https://groups.google.com/a/groups.riscv.org/g/sw-dev/c/aE1ZeHHCYf4
   3139  131. https://gcc.gnu.org/gcc-12/changes.html#os
   3140  132. https://gcc.gnu.org/gcc-12/changes.html#analyzer
   3141  133. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-use-of-uninitialized-value
   3142  134. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wuninitialized
   3143  135. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wmaybe-uninitialized
   3144  136. https://gcc.gnu.org/PR95006
   3145  137. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Optimize-Options.html#index-ftrivial-auto-var-init
   3146  138. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-write-to-const
   3147  139. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-write-to-string-literal
   3148  140. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Common-Function-Attributes.html
   3149  141. https://gcc.gnu.org/PR104793
   3150  142. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-fanalyzer-checker
   3151  143. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-fanalyzer
   3152  144. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-allocation-size
   3153  145. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-divisor
   3154  146. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-offset
   3155  147. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-size
   3156  148. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Common-Function-Attributes.html
   3157  149. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-array-index
   3158  150. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Common-Function-Attributes.html#index-tainted_005fargs-function-attribute
   3159  151. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Common-Function-Attributes.html#index-const-function-attribute
   3160  152. https://gcc.gnu.org/PR104434
   3161  153. https://gcc.gnu.org/PR104576
   3162  154. https://gcc.gnu.org/PR101962
   3163  155. https://gcc.gnu.org/PR101570
   3164  156. https://gcc.gnu.org/PR95006
   3165  157. https://gcc.gnu.org/PR104943
   3166  158. https://gcc.gnu.org/PR104954
   3167  159. https://gcc.gnu.org/PR104955
   3168  160. https://gcc.gnu.org/gcc-12/changes.html#uninitialized
   3169  161. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Optimize-Options.html#index-ftrivial-auto-var-init
   3170  162. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wuninitialized
   3171  163. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Optimize-Options.html#index-ftrivial-auto-var-init
   3172  164. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Optimize-Options.html#index-ftrivial-auto-var-init
   3173  165. https://gcc.gnu.org/gcc-12/changes.html#debug
   3174  166. https://ctfstd.org/
   3175  167. https://gcc.gnu.org/gcc-12/changes.html#12.1
   3176  168. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=12.0
   3177  169. https://gcc.gnu.org/gcc-12/changes.html#12.2
   3178  170. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=12.2
   3179  171. https://gcc.gnu.org/gcc-12/changes.html#12.3
   3180  172. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=12.3
   3181  173. https://gcc.gnu.org/gcc-12/changes.html#12.4
   3182  174. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=12.4
   3183  175. https://gcc.gnu.org/onlinedocs/
   3184  176. mailto:gcc-help (a] gcc.gnu.org
   3185  177. mailto:gcc (a] gcc.gnu.org
   3186  178. https://gcc.gnu.org/lists.html
   3187  179. https://www.fsf.org/
   3188  180. https://gcc.gnu.org/about.html
   3189 ======================================================================
   3190 http://gcc.gnu.org/gcc-11/index.html
   3191 
   3192                              GCC 11 Release Series
   3193 
   3194    July 19, 2024
   3195 
   3196    The GCC developers are pleased to announce the release of GCC 11.5.
   3197 
   3198    This release is a bug-fix release, containing fixes for regressions in
   3199    GCC 11.4 relative to previous releases of GCC.
   3200 
   3201 Release History
   3202 
   3203    GCC 11.5
   3204           July 19, 2024 ([1]changes, [2]documentation)
   3205 
   3206    GCC 11.4
   3207           May 29, 2023 ([3]changes, [4]documentation)
   3208 
   3209    GCC 11.3
   3210           April 21, 2022 ([5]changes, [6]documentation)
   3211 
   3212    GCC 11.2
   3213           July 28, 2021 ([7]changes, [8]documentation)
   3214 
   3215    GCC 11.1
   3216           April 27, 2021 ([9]changes, [10]documentation)
   3217 
   3218 References and Acknowledgements
   3219 
   3220    GCC used to stand for the GNU C Compiler, but since the compiler
   3221    supports several other languages aside from C, it now stands for the
   3222    GNU Compiler Collection.
   3223 
   3224    The GCC developers would like to thank the numerous people that have
   3225    contributed new features, improvements, bug fixes, and other changes as
   3226    well as test results to GCC. This [11]amazing group of volunteers is
   3227    what makes GCC successful.
   3228 
   3229    For additional information about GCC please refer to the [12]GCC
   3230    project web site or contact the [13]GCC development mailing list.
   3231 
   3232    To obtain GCC please use [14]our mirror sites or [15]our version
   3233    control system.
   3234 
   3235 
   3236     For questions related to the use of GCC, please consult these web
   3237     pages and the [16]GCC manuals. If that fails, the
   3238     [17]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   3239     web pages and the development of GCC are welcome on our developer
   3240     list at [18]gcc (a] gcc.gnu.org. All of [19]our lists have public
   3241     archives.
   3242 
   3243    Copyright (C) [20]Free Software Foundation, Inc. Verbatim copying and
   3244    distribution of this entire article is permitted in any medium,
   3245    provided this notice is preserved.
   3246 
   3247    These pages are [21]maintained by the GCC team. Last modified
   3248    2024-07-19.
   3249 
   3250 References
   3251 
   3252    1. https://gcc.gnu.org/gcc-11/changes.html
   3253    2. https://gcc.gnu.org/onlinedocs/11.5.0/
   3254    3. https://gcc.gnu.org/gcc-11/changes.html
   3255    4. https://gcc.gnu.org/onlinedocs/11.4.0/
   3256    5. https://gcc.gnu.org/gcc-11/changes.html
   3257    6. https://gcc.gnu.org/onlinedocs/11.3.0/
   3258    7. https://gcc.gnu.org/gcc-11/changes.html
   3259    8. https://gcc.gnu.org/onlinedocs/11.2.0/
   3260    9. https://gcc.gnu.org/gcc-11/changes.html
   3261   10. https://gcc.gnu.org/onlinedocs/11.1.0/
   3262   11. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Contributors.html
   3263   12. https://gcc.gnu.org/index.html
   3264   13. mailto:gcc (a] gcc.gnu.org
   3265   14. https://gcc.gnu.org/mirrors.html
   3266   15. https://gcc.gnu.org/git.html
   3267   16. https://gcc.gnu.org/onlinedocs/
   3268   17. mailto:gcc-help (a] gcc.gnu.org
   3269   18. mailto:gcc (a] gcc.gnu.org
   3270   19. https://gcc.gnu.org/lists.html
   3271   20. https://www.fsf.org/
   3272   21. https://gcc.gnu.org/about.html
   3273 ======================================================================
   3274 http://gcc.gnu.org/gcc-11/changes.html
   3275 
   3276                              GCC 11 Release Series
   3277                         Changes, New Features, and Fixes
   3278 
   3279    This page is a "brief" summary of some of the huge number of
   3280    improvements in GCC 11. You may also want to check out our [1]Porting
   3281    to GCC 11 page and the [2]full GCC documentation.
   3282 
   3283 Caveats
   3284 
   3285      * The default mode for C++ is now -std=gnu++17 instead of
   3286        -std=gnu++14. Note that [3]C++17 changes to template template
   3287        parameter matching can be disabled independently of other features
   3288        with -fno-new-ttp-matching.
   3289      * When building GCC itself, the host compiler must now support C++11,
   3290        rather than C++98. In particular bootstrapping GCC 11 using an
   3291        older version of GCC requires a binary of GCC 4.8 or later, rather
   3292        than of GCC 3.4 or later as was the case for bootstrapping GCC 10.
   3293      * Naming and location of auxiliary and dump output files changed. If
   3294        you compile multiple input files in a single command, if you enable
   3295        Link Time Optimization, or if you use -dumpbase, -dumpdir,
   3296        -save-temps=*, and you expect any file other than the primary
   3297        output file(s) to be created as a side effect, watch out for
   3298        improvements and a few surprises. See [4]the patch, particularly
   3299        its textual description, for more details about the changes.
   3300      * -gsplit-dwarf no longer enables debug info generation on its own
   3301        but requires a separate -g for this.
   3302      * The libstdc++ configure option --enable-cheaders=c_std is
   3303        deprecated and will be removed in a future release. It should be
   3304        possible to use --enable-cheaders=c_global (the default) with no
   3305        change in behaviour.
   3306      * The front end for compiling BRIG format of Heterogeneous System
   3307        Architecture Intermediate Language (HSAIL) has been deprecated and
   3308        will likely be removed in a future release.
   3309      * Some short options of the gcov tool have been renamed: -i to -j and
   3310        -j to -H.
   3311 
   3312 [5]General Improvements
   3313 
   3314      * [6]ThreadSanitizer improvements to support alternative runtimes and
   3315        environments. The [7]Linux Kernel Concurrency Sanitizer (KCSAN) is
   3316        now supported.
   3317           + Add --param tsan-distinguish-volatile to optionally emit
   3318             instrumentation distinguishing volatile accesses.
   3319           + Add --param tsan-instrument-func-entry-exit to optionally
   3320             control if function entries and exits should be instrumented.
   3321      * In previous releases of GCC, the "column numbers" emitted in
   3322        diagnostics were actually a count of bytes from the start of the
   3323        source line. This could be problematic, both because of:
   3324           + multibyte characters (requiring more than one byte to encode),
   3325             and
   3326           + multicolumn characters (requiring more than one column to
   3327             display in a monospace font)
   3328        For example, the character p ("GREEK SMALL LETTER PI (U+03C0)")
   3329        occupies one column, and its UTF-8 encoding requires two bytes; the
   3330        character &#x1F642; ("SLIGHTLY SMILING FACE (U+1F642)") occupies
   3331        two columns, and its UTF-8 encoding requires four bytes.
   3332        In GCC 11 the column numbers default to being column numbers,
   3333        respecting multi-column characters. The old behavior can be
   3334        restored using a new option [8]-fdiagnostics-column-unit=byte.
   3335        There is also a new option [9]-fdiagnostics-column-origin=,
   3336        allowing the pre-existing default of the left-hand column being
   3337        column 1 to be overridden if desired (e.g. for 0-based columns).
   3338        The output of [10]-fdiagnostics-format=json has been extended to
   3339        supply both byte counts and column numbers for all source
   3340        locations.
   3341        Additionally, in previous releases of GCC, tab characters in the
   3342        source would be emitted verbatim when quoting source code, but be
   3343        prefixed with whitespace or line number information, leading to
   3344        misalignments in the resulting output when compared with the actual
   3345        source. Tab characters are now printed as an appropriate number of
   3346        spaces, using the [11]-ftabstop option (which defaults to 8 spaces
   3347        per tab stop).
   3348      * Introduce [12]Hardware-assisted AddressSanitizer support. This
   3349        sanitizer currently only works for the AArch64 target. It helps
   3350        debug address problems similarly to [13]AddressSanitizer but is
   3351        based on partial hardware assistance and provides probabilistic
   3352        protection to use less RAM at run time. [14]Hardware-assisted
   3353        AddressSanitizer is not production-ready for user space, and is
   3354        provided mainly for use compiling the Linux Kernel.
   3355        To use this sanitizer the command line arguments are:
   3356           + -fsanitize=hwaddress to instrument userspace code.
   3357           + -fsanitize=kernel-hwaddress to instrument kernel code.
   3358      * For targets that produce DWARF debugging information GCC now
   3359        defaults to [15]DWARF version 5 (with the exception of VxWorks and
   3360        Darwin/Mac OS X which default to version 2 and AIX which defaults
   3361        to version 4). This can produce up to 25% more compact debug
   3362        information compared to earlier versions.
   3363        To take full advantage of DWARF version 5 GCC needs to be built
   3364        against binutils version 2.35.2 or higher. When GCC is built
   3365        against earlier versions of binutils GCC will still emit DWARF
   3366        version 5 for most debuginfo data, but will generate version 4
   3367        debug line tables (even when explicitly given -gdwarf-5).
   3368        The following debug information consumers can process DWARF version
   3369        5:
   3370           + GDB 8.0, or higher
   3371           + valgrind 3.17.0
   3372           + elfutils 0.172, or higher (for use with systemtap,
   3373             dwarves/pahole, perf and libabigail)
   3374           + dwz 0.14
   3375        Programs embedding libbacktrace are urged to upgrade to the version
   3376        shipping with GCC 11.
   3377        To make GCC 11 generate an older DWARF version use -g together with
   3378        -gdwarf-2, -gdwarf-3 or -gdwarf-4.
   3379      * Vectorizer improvements:
   3380           + The straight-line code vectorizer now considers the whole
   3381             function when vectorizing and can handle opportunities
   3382             crossing CFG merges and backedges.
   3383      * A series of conditional expressions that compare the same variable
   3384        can be transformed into a switch statement if each of them contains
   3385        a comparison expression. Example:
   3386         int IsHTMLWhitespace(int aChar) {
   3387           return aChar == 0x0009 || aChar == 0x000A ||
   3388                  aChar == 0x000C || aChar == 0x000D ||
   3389                  aChar == 0x0020;
   3390         }
   3391 
   3392        This statement can be transformed into a switch statement and then
   3393        expanded into a bit-test.
   3394      * New command-line options:
   3395           + [16]-fbit-tests, enabled by default, can be used to enable or
   3396             disable switch expansion using bit-tests.
   3397      * Inter-procedural optimization improvements:
   3398           + A new IPA-modref pass was added to track side effects of
   3399             function calls and improve precision of points-to-analysis.
   3400             The pass can be controlled by the [17]-fipa-modref option.
   3401           + The identical code folding pass (controlled by [18]-fipa-icf)
   3402             was significantly improved to increase the number of unified
   3403             functions and to reduce compile-time memory use.
   3404           + IPA-CP (Interprocedural constant propagation) heuristics
   3405             improved its estimation of potential usefulness of known loop
   3406             bounds and strides by taking the estimated frequency of these
   3407             loops into account.
   3408      * Link-time optimization improvements:
   3409           + The LTO bytecode format was optimized for smaller object files
   3410             and faster streaming.
   3411           + Memory allocation of the linking stage was improved to reduce
   3412             peak memory use.
   3413      * Profile driven optimization improvements:
   3414           + Using [19]-fprofile-values, was improved by tracking more
   3415             target values for e.g. indirect calls.
   3416           + GCOV data file format outputs smaller files by representing
   3417             zero counters in a more compact way.
   3418 
   3419 [20]New Languages and Language specific improvements
   3420 
   3421      * GCC 11 adds support for non-rectangular loop nests in OpenMP
   3422        constructs and the allocator routines of [21]OpenMP 5.0, including
   3423        initial allocate clause support in C/C++. The OMP_TARGET_OFFLOAD
   3424        environment variable and the active-levels routines are now
   3425        supported. For C/C++, the declare variant and map support has been
   3426        extended. For Fortran, OpenMP 4.5 is now fully supported and OpenMP
   3427        5.0 support has been extended, including the following features
   3428        which were before only available in C and C++: order(concurrent),
   3429        device_type, memorder-clauses for flush, lastprivate with
   3430        conditional modifier, atomic construct and reduction clause
   3431        extensions of OpenMP 5.0, if clause with simd and cancel modifiers,
   3432        target data without map clause, and limited support for the
   3433        requires construct.
   3434      * Version 2.6 of the [22]OpenACC specification continues to be
   3435        maintained and improved in the C, C++ and Fortran compilers. See
   3436        the [23]implementation status section on the OpenACC wiki page and
   3437        the [24]run-time library documentation for further information.
   3438 
   3439   [25]C family
   3440 
   3441      * New attributes:
   3442           + The [26]no_stack_protector attribute has been added to mark
   3443             functions which should not be instrumented with stack
   3444             protection (-fstack-protector).
   3445           + The existing [27]malloc attribute has been extended so that it
   3446             can be used to identify allocator/deallocator API pairs. A
   3447             pair of new [28]-Wmismatched-dealloc and
   3448             [29]-Wmismatched-new-delete warnings will complain about
   3449             mismatched calls, and [30]-Wfree-nonheap-object about
   3450             deallocation calls with pointers not obtained from allocation
   3451             functions. Additionally, the static analyzer will use these
   3452             attributes when checking for leaks, double-frees,
   3453             use-after-frees, and similar issues.
   3454      * New warnings:
   3455           + [31]-Wmismatched-dealloc, enabled by default, warns about
   3456             calls to deallocation functions with pointers returned from
   3457             mismatched allocation functions.
   3458           + [32]-Wsizeof-array-div, enabled by -Wall, warns about
   3459             divisions of two sizeof operators when the first one is
   3460             applied to an array and the divisor does not equal the size of
   3461             the array element.
   3462           + [33]-Wstringop-overread, enabled by default, warns about calls
   3463             to string functions reading past the end of the arrays passed
   3464             to them as arguments. In prior GCC releases most instances of
   3465             his warning are diagnosed by -Wstringop-overflow.
   3466           + [34]-Wtsan, enabled by default, warns about unsupported
   3467             features in ThreadSanitizer (currently
   3468             std::atomic_thread_fence).
   3469      * Enhancements to existing warnings:
   3470           + [35]-Wfree-nonheap-object detects many more instances of calls
   3471             to deallocation functions with pointers not returned from a
   3472             dynamic memory allocation function.
   3473           + [36]-Wmaybe-uninitialized diagnoses passing pointers or
   3474             references to uninitialized memory to functions taking
   3475             const-qualified arguments.
   3476           + [37]-Wuninitialized detects reads from uninitialized
   3477             dynamically allocated memory.
   3478      * For ELF targets that support the GNU or FreeBSD OSABIs, the used
   3479        attribute will now save the symbol declaration it is applied to
   3480        from linker garbage collection.
   3481        To support this behavior, used symbols that have not been placed in
   3482        specific sections (e.g. with the section attribute, or the
   3483        -f{function,data}-sections options) will be placed in new, unique
   3484        sections.
   3485        This functionality requires Binutils version 2.36 or later.
   3486 
   3487   [38]C
   3488 
   3489      * Several new features from the upcoming C2X revision of the ISO C
   3490        standard are supported with -std=c2x and -std=gnu2x. Some of these
   3491        features are also supported as extensions when compiling for older
   3492        language versions. In addition to the features listed, some
   3493        features previously supported as extensions and now added to the C
   3494        standard are enabled by default in C2X mode and not diagnosed with
   3495        -std=c2x -Wpedantic.
   3496           + The BOOL_MAX and BOOL_WIDTH macros are provided in <limits.h>.
   3497           + As in C++, function definitions no longer need to give names
   3498             for unused function parameters.
   3499           + The expansions of the true and false macros in <stdbool.h>
   3500             have changed so that they have type bool.
   3501           + The [[nodiscard]] standard attribute is now supported.
   3502           + The __has_c_attribute preprocessor operator is now supported.
   3503           + Macros INFINITY, NAN, FLT_SNAN, DBL_SNAN, LDBL_SNAN,
   3504             DEC_INFINITY, DEC_NAN, and corresponding signaling NaN macros
   3505             for _FloatN, _FloatNx and _DecimalN types, are provided in
   3506             <float.h>. There are also corresponding built-in functions
   3507             __builtin_nansdN for decimal signaling NaNs.
   3508           + Macros FLT_IS_IEC_60559, DBL_IS_IEC_60559 and
   3509             LDBL_IS_IEC_60559 are provided in <float.h>.
   3510           + The feature test macro __STDC_WANT_IEC_60559_EXT__ is
   3511             supported by <float.h>.
   3512           + Labels may appear before declarations and at the end of a
   3513             compound statement.
   3514      * New warnings:
   3515           + [39]-Warray-parameter, enabled by -Wall, warns about
   3516             redeclarations of functions with ordinary array arguments
   3517             declared using inconsistent forms. The warning also enables
   3518             the detection of the likely out of bounds accesses in calls to
   3519             such functions with smaller arrays.
   3520           + [40]-Wvla-parameter, enabled by -Wall, warns redeclarations of
   3521             functions with variable length array arguments declared using
   3522             inconsistent forms or with mismatched bounds. The warning also
   3523             enables the detection of the likely out of bounds accesses in
   3524             calls to such functions with smaller arrays.
   3525 
   3526   [41]C++
   3527 
   3528      * The default mode has been changed to -std=gnu++17.
   3529      * Several C++20 features have been implemented:
   3530           + the compiler now supports consteval virtual functions
   3531           + P2082R1, Fixing CTAD for aggregates
   3532           + P0593R6, Pseudo-destructors end object lifetimes
   3533           + P1907R1, Inconsistencies with non-type template parameters
   3534             (complete implementation)
   3535           + P1975R0, Fixing the wording of parenthesized
   3536             aggregate-initialization
   3537           + P1009R2, Array size deduction in new-expressions
   3538           + P1099R5, using enum
   3539           + Modules, Requires -fmodules-ts and some aspects are
   3540             incomplete. Refer to [42]C++ 20 Status
   3541      * The C++ front end has experimental support for some of the upcoming
   3542        C++23 draft features with the -std=c++23, -std=gnu++23, -std=c++2b
   3543        or -std=gnu++2b flags, including
   3544           + P0330R8, Literal Suffix for (signed) size_t.
   3545        For a full list of new features, see [43]the C++ status page.
   3546      * Several C++ Defect Reports have been resolved, e.g.:
   3547           + DR 625, Use of auto as a template-argument
   3548           + DR 1512, Pointer comparison vs qualification conversions
   3549           + DR 1722, Should lambda to function pointer conversion function
   3550             be noexcept?
   3551           + DR 1914, Duplicate standard attributes
   3552           + DR 2032, Default template-arguments of variable templates
   3553           + DR 2289, Uniqueness of decomposition declaration names
   3554           + DR 2237, Can a template-id name a constructor?
   3555           + DR 2303, Partial ordering and recursive variadic inheritance
   3556           + DR 2369, Ordering between constraints and substitution
   3557           + DR 2450, braced-init-list as a template-argument
   3558      * G++ now performs better access checking in templates ([44]PR41437).
   3559      * reinterpret_casts in constexpr evaluation are now checked more
   3560        completely ([45]PR95307).
   3561      * The diagnostic for static_assert has been improved: the compiler
   3562        now shows the expression including its template arguments (if there
   3563        were any), and can point to the failing clause if the condition
   3564        comprised of any logical AND operators ([46]PR97518).
   3565      * New warnings:
   3566           + [47]-Wctad-maybe-unsupported, disabled by default, warns about
   3567             performing class template argument deduction on a type with no
   3568             deduction guides.
   3569           + [48]-Wrange-loop-construct, enabled by -Wall, warns when a
   3570             range-based for-loop is creating unnecessary and expensive
   3571             copies.
   3572           + [49]-Wdeprecated-enum-enum-conversion, enabled by default in
   3573             C++20, warns about deprecated arithmetic conversions on
   3574             operands of enumeration types, as outlined in
   3575             [depr.arith.conv.enum].
   3576           + [50]-Wdeprecated-enum-float-conversion, enabled by default in
   3577             C++20, warns about deprecated arithmetic conversions on
   3578             operands where one is of enumeration type and the other is of
   3579             a floating-point type, as outlined in [depr.arith.conv.enum].
   3580           + [51]-Wmismatched-new-delete, enabled by -Wall, warns about
   3581             calls to C++ operator delete with pointers returned from
   3582             mismatched forms of operator new or from other mismatched
   3583             allocation functions.
   3584           + [52]-Wvexing-parse, enabled by default, warns about the most
   3585             vexing parse rule: the cases when a declaration looks like a
   3586             variable definition, but the C++ language requires it to be
   3587             interpreted as a function declaration.
   3588      * Enhancements to existing warnings:
   3589           + [53]-Wnonnull considers the implicit this argument of every
   3590             C++ nonstatic member function to have been implicitly declared
   3591             with attribute nonnull and triggers warnings for calls where
   3592             the pointer is null.
   3593 
   3594     [54]Runtime Library (libstdc++)
   3595 
   3596      * Improved C++17 support, including:
   3597           + std::from_chars and std::to_chars for floating-point types.
   3598      * Improved experimental C++20 support, including:
   3599           + Calendar additions to <chrono>. Thanks to Cassio Neri for
   3600             optimizations.
   3601           + std::bit_cast
   3602           + std::source_location
   3603           + Atomic wait and notify operations.
   3604           + <barrier>, <latch>, and <semaphore>
   3605           + <syncstream>
   3606           + Efficient access to basic_stringbuf's buffer.
   3607           + Heterogeneous lookup in unordered containers.
   3608      * Experimental C++23 support, including:
   3609           + contains member functions for strings, thanks to Paul Fee.
   3610           + std::to_underlying, std::is_scoped_enum
   3611      * Experimental support for Data-Parallel Types (simd) from the
   3612        Parallelism 2 TS, thanks to Matthias Kretz.
   3613      * Faster std::uniform_int_distribution, thanks to Daniel Lemire.
   3614 
   3615   [55]D
   3616 
   3617      * New features:
   3618           + A new bottom type typeof(*null) has been added to represent
   3619             run-time errors and non-terminating functions. This also
   3620             introduces a new standard alias for the type named noreturn,
   3621             and is implicitly imported into every module.
   3622           + Printf-like and scanf-like functions are now detected by
   3623             prefixing them with pragma(printf) for printf-like functions
   3624             or pragma(scanf) for scanf-like functions.
   3625           + The __traits() expression now supports the extensions
   3626             isDeprecated, isDisabled, isFuture, isModule, isPackage,
   3627             child, isReturnOnStack, isZeroInit, getTargetInfo,
   3628             getLocation, hasPostblit, isCopyable, getVisibility, and
   3629             totype.
   3630           + An expression-based contract syntax has been added to the
   3631             language.
   3632           + Function literals can now return a value by reference with the
   3633             ref keyword.
   3634           + A new syntax is available to declare aliases to function types
   3635             using the alias syntax based on the assignment operator.
   3636           + New types __c_complex_float, __c_complex_double,
   3637             __c_complex_real, and __c_wchar_t have been added for
   3638             interfacing with C and C++ code, and are available from the
   3639             core.stdc.config module.
   3640           + User-defined attributes can now be used to annotate enum
   3641             members, alias declarations, and function parameters.
   3642           + Template alias parameters can now be instantiated with basic
   3643             types such as int or void function().
   3644           + The mixin construct can now be used as types in the form
   3645             mixin(string) var.
   3646           + The mixin construct can now take an argument list, same as
   3647             pragma(msg).
   3648      * New intrinsics:
   3649           + Bitwise rotate intrinsics core.bitop.rol and core.bitop.ror
   3650             have been added.
   3651           + Byte swap intrinsic core.bitop.byteswap for swapping bytes in
   3652             a 2-byte ushort has been added.
   3653           + Math intrinsics available from core.math now have overloads
   3654             for float and double types.
   3655           + Volatile intrinsics core.volatile.volatileLoad and
   3656             core.volatile.volatileStore have been moved from the
   3657             core.bitop module.
   3658      * New attributes:
   3659           + The following GCC attributes are now recognized and available
   3660             from the gcc.attributes module with short-hand aliases for
   3661             convenience:
   3662                o @attribute("alloc_size", arguments) or
   3663                  @alloc_size(arguments).
   3664                o @attribute("always_inline") or @always_inline.
   3665                o @attribute("used") or @used.
   3666                o @attribute("optimize", arguments) or
   3667                  @optimize(arguments).
   3668                o @attribute("cold") or @cold.
   3669                o @attribute("noplt") or @noplt.
   3670                o @attribute("target_clones", arguments) or
   3671                  @target_clones(arguments).
   3672                o @attribute("no_icf") or @no_icf.
   3673                o @attribute("noipa") or @noipa.
   3674                o @attribute("symver", arguments) or @symver(arguments).
   3675           + New aliases have been added to gcc.attributes for
   3676             compatibility with ldc.attributes.
   3677                o The @allocSize(arguments) attribute is the same as
   3678                  @alloc_size(arguments), but uses a 0-based index for
   3679                  function arguments.
   3680                o The @assumeUsed attribute is an alias for
   3681                  @attribute("used").
   3682                o The @fastmath attribute is an alias for
   3683                  @optimize("Ofast").
   3684                o The @naked attribute is an alias for @attribute("naked").
   3685                  This attribute may not be available on all targets.
   3686                o The @restrict attribute has been added to specify that a
   3687                  function parameter is to be restrict-qualified in the C99
   3688                  sense of the term.
   3689                o The @optStrategy(strategy) attribute is an alias for
   3690                  @optimize("O0") when the strategy is "none", otherwise
   3691                  @optimize("Os") for the "optsize" and "minsize"
   3692                  strategies.
   3693                o The @polly attribute is an alias for
   3694                  @optimize("loop-parallelize-all").
   3695                o The @section(name) attribute is an alias for
   3696                  @attribute("section", name).
   3697                o The @target(arguments) attribute is an alias for
   3698                  attribute("target", arguments).
   3699                o The @weak attribute is an alias for @attribute("weak").
   3700      * New language options:
   3701           + -fweak-templates, added to control whether declarations that
   3702             can be defined in multiple objects should be emitted as weak
   3703             symbols. The default is to emit all symbols with extern
   3704             linkage as weak, unless the target lacks support for weak
   3705             symbols.
   3706           + -Wdeprecated, this option is now enabled by default.
   3707           + -Wextra, this option now turns on all warnings that are not
   3708             part of the core D language front-end - -Waddress,
   3709             -Wcast-result, -Wunknown-pragmas.
   3710           + -Wvarargs, added to turn on warnings about questionable usage
   3711             of the va_start intrinsic.
   3712      * Deprecated and removed features:
   3713           + Compiler-recognized attributes are now made available from the
   3714             gcc.attributes module, the former module gcc.attribute has
   3715             been deprecated and will be removed in a future release.
   3716           + The @attribute("alias") attribute has been removed, as it had
   3717             been superseded by pragma(mangle).
   3718           + The @attribute("forceinline") attribute has been removed and
   3719             renamed to @always_inline.
   3720           + __vector types that are not supported in hardware are now
   3721             rejected at compile-time. Previously all vector types were
   3722             accepted by the compiler and emulated when target support was
   3723             absent.
   3724           + The extern(Pascal) linkage attribute has been removed.
   3725           + The deprecation phase for -ftransition=import and
   3726             -ftransition=checkimports is finished. These switches no
   3727             longer have an effect and are now removed. Symbols that are
   3728             not visible in a particular scope will no longer be found by
   3729             the compiler.
   3730           + It is now an error to use private variables selectively
   3731             imported from other modules. Due to a bug, some imported
   3732             private members were visible from other modules, violating the
   3733             specification.
   3734           + The -fweak compiler switch has been removed, as it existed
   3735             only for testing.
   3736 
   3737   [56]Fortran
   3738 
   3739      * Added DEPRECATED to !GCC$'s attributes directive.
   3740 
   3741   [57]Go
   3742 
   3743      * GCC 11 provides a complete implementation of the Go 1.16.3 user
   3744        packages.
   3745 
   3746 [58]libgccjit
   3747 
   3748      * libgccjit was marked as merely "Alpha" quality when [59]originally
   3749        added in GCC 5. Given that we have maintained [60]API and ABI
   3750        compatibility since then and it is in use by various projects, we
   3751        have removed that caveat.
   3752      * libgccjit can now be built for MinGW
   3753      * The libgccjit API gained 10 new entry points:
   3754           + [61]gcc_jit_global_set_initializer
   3755           + 9 entrypoints for [62]directly embedding asm statements into a
   3756             compile, analogous to inline asm in the C front end
   3757 
   3758 [63]New Targets and Target Specific Improvements
   3759 
   3760   [64]AArch64 & arm
   3761 
   3762      * A number of new CPUs are supported through arguments to the -mcpu
   3763        and -mtune options in both the arm and aarch64 back ends (GCC
   3764        identifiers in parentheses):
   3765           + Arm Cortex-A78 (cortex-a78).
   3766           + Arm Cortex-A78AE (cortex-a78ae).
   3767           + Arm Cortex-A78C (cortex-a78c).
   3768           + Arm Cortex-X1 (cortex-x1).
   3769           + Arm Neoverse V1 (neoverse-v1).
   3770           + Arm Neoverse N2 (neoverse-n2).
   3771      * GCC can now auto-vectorize operations performing addition,
   3772        subtraction, multiplication and the accumulate/subtract variants on
   3773        complex numbers, taking advantage of the Advanced SIMD instructions
   3774        in the Armv8.3-a (AArch64/AArch32), SVE (AArch64), SVE2 (AArch64)
   3775        and MVE (AArch32 M-profile) instruction sets.
   3776 
   3777   [65]AArch64
   3778 
   3779      * In addition to the above, the following AArch64-only CPUs are now
   3780        supported:
   3781           + Fujitsu A64FX (a64fx).
   3782           + Arm Cortex-R82 (cortex-r82).
   3783      * The AArch64 Armv8-R architecture is now supported through the
   3784        -march=armv8-r option.
   3785      * Mitigation against the [66]Straight-line Speculation vulnerability
   3786        is supported with the -mharden-sls= option. Please refer to the
   3787        documentation for usage instructions.
   3788      * The availability of Advanced SIMD intrinsics available through the
   3789        arm_neon.h header is improved and GCC 11 supports the full set of
   3790        intrinsics defined by ACLE Q3 2020.
   3791 
   3792   [67]AMD Radeon (GCN)
   3793 
   3794      * Initial support for gfx908 GPUs has been added.
   3795 
   3796   [68]arm
   3797 
   3798      * Initial auto-vectorization is now available when targeting the MVE
   3799        instruction set.
   3800      * GCC can now make use of the Low Overhead Branch instruction in
   3801        Armv8.1-M to optimize loop counters and checks.
   3802      * The -mcpu=cortex-m55 option now supports the extensions +nomve and
   3803        +nomve.fp to control generation of MVE and MVE floating-point
   3804        instructions.
   3805 
   3806   [69]IA-32/x86-64
   3807 
   3808      * New ISA extension support for Intel TSXLDTRK was added to GCC.
   3809        TSXLDTRK intrinsics are available via the -mtsxldtrk compiler
   3810        switch.
   3811      * New ISA extension support for Intel SERIALIZE was added to GCC.
   3812        SERIALIZE intrinsics are available via the -mserialize compiler
   3813        switch.
   3814      * New ISA extension support for Intel HRESET was added to GCC. HRESET
   3815        intrinsics are available via the -mhreset compiler switch.
   3816      * New ISA extension support for Intel UINTR was added to GCC. UINTR
   3817        intrinsics are available via the -muintr compiler switch.
   3818      * New ISA extension support for Intel KEYLOCKER was added to GCC.
   3819        KEYLOCKER intrinsics are available via the -mkeylocker compiler
   3820        switch.
   3821      * New ISA extension support for Intel AMX-TILE, AMX-INT8, AMX-BF16
   3822        was added to GCC. AMX-TILE, AMX-INT8, AMX-BF16 intrinsics are
   3823        available via the -mamx-tile, -mamx-int8, -mamx-bf16 compiler
   3824        switches.
   3825      * New ISA extension support for Intel AVX-VNNI was added to GCC.
   3826        AVX-VNNI intrinsics are available via the -mavxvnni compiler
   3827        switch.
   3828      * GCC now supports the Intel CPU named Sapphire Rapids through
   3829        -march=sapphirerapids. The switch enables the MOVDIRI, MOVDIR64B,
   3830        AVX512VP2INTERSECT, ENQCMD, CLDEMOTE, SERIALIZE, PTWRITE, WAITPKG,
   3831        TSXLDTRK, AMT-TILE, AMX-INT8, AMX-BF16, and AVX-VNNI ISA
   3832        extensions.
   3833      * GCC now supports the Intel CPU named Alderlake through
   3834        -march=alderlake. The switch enables the CLDEMOTE, PTWRITE,
   3835        WAITPKG, SERIALIZE, KEYLOCKER, AVX-VNNI, and HRESET ISA extensions.
   3836      * GCC now supports the Intel CPU named Rocketlake through
   3837        -march=rocketlake. Rocket Lake is based on Icelake client and minus
   3838        SGX.
   3839      * GCC now supports AMD CPUs based on the znver3 core via
   3840        -march=znver3.
   3841      * GCC now supports micro-architecture levels defined in the x86-64
   3842        psABI via -march=x86-64-v2, -march=x86-64-v3 and -march=x86-64-v4.
   3843 
   3844   [70]Nios II
   3845 
   3846      * The options -mcustom-insn=N no longer produce compiler warnings if
   3847        the custom instruction is not generated due to missing optimization
   3848        options such as -fno-math-errno, -ffinite-math-only, or
   3849        -funsafe-math-optimizations. These warnings were not consistently
   3850        emitted for all custom instructions.
   3851      * The -mcustom-fpu-cfg=fph2 option has been added to enable the
   3852        custom instructions supported by the Nios II Floating Point
   3853        Hardware 2 Component.
   3854 
   3855   [71]NVPTX
   3856 
   3857      * The -misa default has changed from sm_30 to sm_35.
   3858      * The -m32 compiler switch has been removed.
   3859      * The -msoft-stack-reserve-local format has been fixed. Previously,
   3860        it accepted -msoft-stack-reserve-local<n>. It now accepts
   3861        -msoft-stack-reserve-local=<n>.
   3862 
   3863   [72]S/390, System z, IBM Z Systems
   3864 
   3865      * The behavior when compiling with -fexcess-precision=standard (e.g.,
   3866        implied by -std=c99) on s390(x) targets can now be controlled at
   3867        configure time with the flag --enable-s390-excess-float-precision.
   3868        When enabled, GCC will maintain previous behavior and evaluate
   3869        float expressions in double precision, which aligns with the
   3870        definition of float_t as double. With the flag disabled, GCC will
   3871        always evaluate float expressions in single precision. In native
   3872        builds and cross compiles that have target libc headers, GCC will
   3873        by default match the definition of float_t in the installed glibc.
   3874 
   3875   [73]RISC-V
   3876 
   3877      * Support address sanitizer for RISC-V.
   3878      * Support big-endian for RISC-V, thanks to Marcus Comstedt.
   3879      * Implement new style of architecture extension test macros: each
   3880        architecture extension has a corresponding feature test macro,
   3881        which can be used to test its existence and version information.
   3882      * Legacy architecture extension test macros like __riscv_atomic are
   3883        deprecated, but will still be supported for at least 2 release
   3884        cycles.
   3885      * Support IFUNC for riscv*-*-linux*.
   3886      * Add new option -misa-spec=* to control ISA spec version. This
   3887        controls the default version of each extensions. It defaults to
   3888        2.2.
   3889      * Introduce the --with-multilib-generator configure time option. This
   3890        allows for flexible config multi-lib settings. Its syntax is the
   3891        same as RISC-V's multilib-generator.
   3892      * Extend the sytax for multilib-generator, support expansion operator
   3893        * to reduce the complexity of complicated multi-lib re-use rules.
   3894      * Support -mcpu=* option aligned with RISC-V clang/LLVM. It sets the
   3895        pipeline model and architecture extensions, like -mtune=* plus
   3896        -march=*.
   3897      * Support for TLS stack protector canary access, thanks to Cooper Qu.
   3898      * Support __builtin_thread_pointer for RISC-V.
   3899      * Introduce shorten_memrefs optimization, which reduces the code size
   3900        for memory access, thanks to Craig Blackmore.
   3901 
   3902 [74]Operating Systems
   3903 
   3904   [75]AIX
   3905 
   3906      * GCC for AIX can be built as a 64-bit application and the runtime is
   3907        built as FAT libraries containing both 32-bit and 64-bit objects.
   3908      * Support AIX Vector Extended ABI with -mabi=vec-extabi.
   3909      * Thread-Local uninitiated data placed in local common section.
   3910      * Use thread-safe access in ctype.
   3911      * Link with libc128.a when long-double-128 enabled.
   3912 
   3913 [76]Improvements to Static Analyzer
   3914 
   3915      * The implementation of how program state is tracked within
   3916        [77]-fanalyzer has been completely rewritten for GCC 11, fixing
   3917        numerous bugs, and allowing for the analyzer to scale to larger C
   3918        source files.
   3919      * The analysis of allocations and deallocations has been generalized
   3920        beyond malloc and free.
   3921           + As preliminary work towards eventually supporting C++, the
   3922             malloc/free checking will also check new/delete and
   3923             new[]/delete[]. However, C++ is not yet properly supported by
   3924             [78]-fanalyzer (for example, exception-handling is
   3925             unimplemented).
   3926           + As noted above, the existing [79]malloc attribute has been
   3927             extended so that it can be used to identify
   3928             allocator/deallocator API pairs. The analyzer will use these
   3929             attributes when checking for leaks, double-frees,
   3930             use-after-frees, and similar issues.
   3931           + A new [80]-Wanalyzer-mismatching-deallocation warning has been
   3932             added, covering such mismatches as using scalar delete rather
   3933             vector delete[].
   3934      * The analyzer has gained warnings
   3935        [81]-Wanalyzer-shift-count-negative,
   3936        [82]-Wanalyzer-shift-count-overflow, [83]-Wanalyzer-write-to-const,
   3937        and [84]-Wanalyzer-write-to-string-literal, all enabled by default
   3938        when [85]-fanalyzer is enabled.
   3939      * The analyzer can now be extended by GCC plugins, allowing for
   3940        domain-specific path-sensitive warnings. An example of using a
   3941        [86]GCC plugin to check for misuses of CPython's global interpreter
   3942        lock can be seen in the test suite
   3943      * The analyzer has gained new debugging options
   3944        [87]-fdump-analyzer-json and [88]-fno-analyzer-feasibility.
   3945 
   3946 Other significant improvements
   3947 
   3948      * GCC has gained a new environment variable
   3949        [89]GCC_EXTRA_DIAGNOSTIC_OUTPUT which can be used by IDEs to
   3950        request machine-readable fix-it hints without needing to adjust
   3951        build flags.
   3952 
   3953 [90]GCC 11.1
   3954 
   3955    This is the [91]list of problem reports (PRs) from GCC's bug tracking
   3956    system that are known to be fixed in the 11.1 release. This list might
   3957    not be complete (that is, it is possible that some PRs that have been
   3958    fixed are not listed here).
   3959 
   3960 [92]GCC 11.2
   3961 
   3962    This is the [93]list of problem reports (PRs) from GCC's bug tracking
   3963    system that are known to be fixed in the 11.2 release. This list might
   3964    not be complete (that is, it is possible that some PRs that have been
   3965    fixed are not listed here).
   3966 
   3967 [94]GCC 11.3
   3968 
   3969    This is the [95]list of problem reports (PRs) from GCC's bug tracking
   3970    system that are known to be fixed in the 11.3 release. This list might
   3971    not be complete (that is, it is possible that some PRs that have been
   3972    fixed are not listed here).
   3973 
   3974 [96]GCC 11.4
   3975 
   3976    This is the [97]list of problem reports (PRs) from GCC's bug tracking
   3977    system that are known to be fixed in the 11.4 release. This list might
   3978    not be complete (that is, it is possible that some PRs that have been
   3979    fixed are not listed here).
   3980 
   3981   Target Specific Changes
   3982 
   3983     x86-64
   3984 
   3985      * The x86-64 ABI of passing and returning structure with a 64-bit
   3986        single precision vector changed in GCC 11.1 when 3DNOW is disabled.
   3987        Disabling 3DNOW no longer changes how they are passed nor returned.
   3988        This ABI change is now diagnosed with -Wpsabi.
   3989      * Mitigation against straight line speculation (SLS) for function
   3990        return and indirect jump is supported via
   3991        -mharden-sls=[none|all|return|indirect-jmp].
   3992      * Add CS prefix to call and jmp to indirect thunk with branch target
   3993        in r8-r15 registers via -mindirect-branch-cs-prefix.
   3994 
   3995 [98]GCC 11.5
   3996 
   3997    This is the [99]list of problem reports (PRs) from GCC's bug tracking
   3998    system that are known to be fixed in the 11.5 release. This list might
   3999    not be complete (that is, it is possible that some PRs that have been
   4000    fixed are not listed here).
   4001 
   4002   Caveats
   4003 
   4004     aarch64
   4005 
   4006      * Due to a bug introduced a few weeks before the 11.5.0 release if
   4007        the compiler is configured without explicit --with-arch=,
   4008        --with=cpu= and/or --with-tune= configure options the compiler
   4009        without explicit -march= etc. options might act as if asked for
   4010        cortex-a34. This can be fixed by applying manually the
   4011        [100]r12-8060 commit patch on top of GCC 11.5.0. See [101]PR116029
   4012        for more details. GCC 11.4.0 or earlier releases are not affected.
   4013 
   4014 
   4015     For questions related to the use of GCC, please consult these web
   4016     pages and the [102]GCC manuals. If that fails, the
   4017     [103]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   4018     web pages and the development of GCC are welcome on our developer
   4019     list at [104]gcc (a] gcc.gnu.org. All of [105]our lists have public
   4020     archives.
   4021 
   4022    Copyright (C) [106]Free Software Foundation, Inc. Verbatim copying and
   4023    distribution of this entire article is permitted in any medium,
   4024    provided this notice is preserved.
   4025 
   4026    These pages are [107]maintained by the GCC team. Last modified
   4027    2025-01-31.
   4028 
   4029 References
   4030 
   4031    1. https://gcc.gnu.org/gcc-11/porting_to.html
   4032    2. https://gcc.gnu.org/onlinedocs/index.html#current
   4033    3. https://wg21.link/p0522r0
   4034    4. https://gcc.gnu.org/pipermail/gcc-patches/2020-May/546494.html
   4035    5. https://gcc.gnu.org/gcc-11/changes.html#general
   4036    6. https://github.com/google/sanitizers/wiki/ThreadSanitizerCppManual
   4037    7. https://www.kernel.org/doc/html/latest/dev-tools/kcsan.html
   4038    8. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-column-unit
   4039    9. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-column-origin
   4040   10. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format
   4041   11. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Preprocessor-Options.html#index-ftabstop
   4042   12. https://clang.llvm.org/docs/HardwareAssistedAddressSanitizerDesign.html
   4043   13. https://github.com/google/sanitizers/wiki/AddressSanitizer
   4044   14. https://clang.llvm.org/docs/HardwareAssistedAddressSanitizerDesign.html
   4045   15. https://dwarfstd.org/doc/DWARF5.pdf
   4046   16. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Code-Gen-Options.html#index-fno-bit-tests
   4047   17. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Optimize-Options.html#index-fipa-modref
   4048   18. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Optimize-Options.html#index-fipa-ocf
   4049   19. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Optimize-Options.html#index-fprofile-values
   4050   20. https://gcc.gnu.org/gcc-11/changes.html#languages
   4051   21. https://www.openmp.org/specifications/
   4052   22. https://www.openacc.org/
   4053   23. https://gcc.gnu.org/wiki/OpenACC/Implementation%20Status#status-11
   4054   24. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/libgomp/Enabling-OpenACC.html
   4055   25. https://gcc.gnu.org/gcc-11/changes.html#c-family
   4056   26. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Common-Function-Attributes.html#index-no_005fstack_005fprotector-function-attribute
   4057   27. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Common-Function-Attributes.html#index-malloc-function-attribute
   4058   28. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wmismatched-dealloc
   4059   29. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wmismatched-new-delete
   4060   30. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wfree-nonheap-object
   4061   31. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wmismatched-dealloc
   4062   32. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wsizeof-array-div
   4063   33. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wstringop-overread
   4064   34. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wtsan
   4065   35. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wfree-nonheap-object
   4066   36. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wmaybe-uninitialized
   4067   37. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wuninitialized
   4068   38. https://gcc.gnu.org/gcc-11/changes.html#c
   4069   39. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Warray-parameter
   4070   40. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wvla-parameter
   4071   41. https://gcc.gnu.org/gcc-11/changes.html#cxx
   4072   42. https://gcc.gnu.org/projects/cxx-status.html#cxx20
   4073   43. https://gcc.gnu.org/projects/cxx-status.html#cxx23
   4074   44. https://gcc.gnu.org/PR41437
   4075   45. https://gcc.gnu.org/PR95307
   4076   46. https://gcc.gnu.org/PR97518
   4077   47. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wctad-maybe-unsupported
   4078   48. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wrange-loop-construct
   4079   49. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wdeprecated-enum-enum-conversion
   4080   50. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wdeprecated-enum-float-conversion
   4081   51. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wmismatched-new-delete
   4082   52. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wvexing-parse
   4083   53. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wnonnull
   4084   54. https://gcc.gnu.org/gcc-11/changes.html#libstdcxx
   4085   55. https://gcc.gnu.org/gcc-11/changes.html#d
   4086   56. https://gcc.gnu.org/gcc-11/changes.html#fortran
   4087   57. https://gcc.gnu.org/gcc-11/changes.html#go
   4088   58. https://gcc.gnu.org/gcc-11/changes.html#jit
   4089   59. https://gcc.gnu.org/gcc-5/changes.html#jit
   4090   60. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/jit/topics/compatibility.html
   4091   61. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/jit/topics/expressions.html#c.gcc_jit_global_set_initializer
   4092   62. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/jit/topics/asm.html
   4093   63. https://gcc.gnu.org/gcc-11/changes.html#targets
   4094   64. https://gcc.gnu.org/gcc-11/changes.html#arm-targets
   4095   65. https://gcc.gnu.org/gcc-11/changes.html#aarch64
   4096   66. https://developer.arm.com/documentation/102587/0102/Straight-line-speculation-frequently-asked-questions
   4097   67. https://gcc.gnu.org/gcc-11/changes.html#amdgcn
   4098   68. https://gcc.gnu.org/gcc-11/changes.html#arm
   4099   69. https://gcc.gnu.org/gcc-11/changes.html#x86
   4100   70. https://gcc.gnu.org/gcc-11/changes.html#nios2
   4101   71. https://gcc.gnu.org/gcc-11/changes.html#nvptx
   4102   72. https://gcc.gnu.org/gcc-11/changes.html#s390
   4103   73. https://gcc.gnu.org/gcc-11/changes.html#riscv
   4104   74. https://gcc.gnu.org/gcc-11/changes.html#os
   4105   75. https://gcc.gnu.org/gcc-11/changes.html#aix
   4106   76. https://gcc.gnu.org/gcc-11/changes.html#analyzer
   4107   77. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html
   4108   78. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html
   4109   79. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Common-Function-Attributes.html#index-malloc-function-attribute
   4110   80. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-mismatching-deallocation
   4111   81. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-shift-count-negative
   4112   82. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-shift-count-overflow
   4113   83. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-write-to-const
   4114   84. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-write-to-string-literal
   4115   85. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html
   4116   86. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=66dde7bc64b75d4a338266333c9c490b12d49825
   4117   87. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html#index-fdump-analyzer-json
   4118   88. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html#index-fno-analyzer-feasibility
   4119   89. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Environment-Variables.html#index-GCC_005fEXTRA_005fDIAGNOSTIC_005fOUTPUT
   4120   90. https://gcc.gnu.org/gcc-11/changes.html#11.1
   4121   91. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=11.0
   4122   92. https://gcc.gnu.org/gcc-11/changes.html#11.2
   4123   93. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=11.2
   4124   94. https://gcc.gnu.org/gcc-11/changes.html#11.3
   4125   95. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=11.3
   4126   96. https://gcc.gnu.org/gcc-11/changes.html#11.4
   4127   97. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=11.4
   4128   98. https://gcc.gnu.org/gcc-11/changes.html#11.5
   4129   99. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=11.5
   4130  100. https://gcc.gnu.org/r12-8060
   4131  101. https://gcc.gnu.org/PR116029
   4132  102. https://gcc.gnu.org/onlinedocs/
   4133  103. mailto:gcc-help (a] gcc.gnu.org
   4134  104. mailto:gcc (a] gcc.gnu.org
   4135  105. https://gcc.gnu.org/lists.html
   4136  106. https://www.fsf.org/
   4137  107. https://gcc.gnu.org/about.html
   4138 ======================================================================
   4139 http://gcc.gnu.org/gcc-10/index.html
   4140 
   4141                              GCC 10 Release Series
   4142 
   4143    (This release series is no longer supported.)
   4144 
   4145    July, 7, 2023
   4146 
   4147    The [1]GNU project and the GCC developers are pleased to announce the
   4148    release of GCC 10.5.
   4149 
   4150    This release is a bug-fix release, containing fixes for regressions in
   4151    GCC 10.4 relative to previous releases of GCC.
   4152 
   4153 Release History
   4154 
   4155    GCC 10.5
   4156           July 7, 2023 ([2]changes, [3]documentation)
   4157 
   4158    GCC 10.4
   4159           June 28, 2022 ([4]changes, [5]documentation)
   4160 
   4161    GCC 10.3
   4162           April 8, 2021 ([6]changes, [7]documentation)
   4163 
   4164    GCC 10.2
   4165           July 23, 2020 ([8]changes, [9]documentation)
   4166 
   4167    GCC 10.1
   4168           May 7, 2020 ([10]changes, [11]documentation)
   4169 
   4170 References and Acknowledgements
   4171 
   4172    GCC used to stand for the GNU C Compiler, but since the compiler
   4173    supports several other languages aside from C, it now stands for the
   4174    GNU Compiler Collection.
   4175 
   4176    The GCC developers would like to thank the numerous people that have
   4177    contributed new features, improvements, bug fixes, and other changes as
   4178    well as test results to GCC. This [12]amazing group of volunteers is
   4179    what makes GCC successful.
   4180 
   4181    For additional information about GCC please refer to the [13]GCC
   4182    project web site or contact the [14]GCC development mailing list.
   4183 
   4184    To obtain GCC please use [15]our mirror sites or [16]our version
   4185    control system.
   4186 
   4187 
   4188     For questions related to the use of GCC, please consult these web
   4189     pages and the [17]GCC manuals. If that fails, the
   4190     [18]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   4191     web pages and the development of GCC are welcome on our developer
   4192     list at [19]gcc (a] gcc.gnu.org. All of [20]our lists have public
   4193     archives.
   4194 
   4195    Copyright (C) [21]Free Software Foundation, Inc. Verbatim copying and
   4196    distribution of this entire article is permitted in any medium,
   4197    provided this notice is preserved.
   4198 
   4199    These pages are [22]maintained by the GCC team. Last modified
   4200    2024-05-30.
   4201 
   4202 References
   4203 
   4204    1. http://www.gnu.org/
   4205    2. https://gcc.gnu.org/gcc-10/changes.html
   4206    3. https://gcc.gnu.org/onlinedocs/10.5.0/
   4207    4. https://gcc.gnu.org/gcc-10/changes.html
   4208    5. https://gcc.gnu.org/onlinedocs/10.4.0/
   4209    6. https://gcc.gnu.org/gcc-10/changes.html
   4210    7. https://gcc.gnu.org/onlinedocs/10.3.0/
   4211    8. https://gcc.gnu.org/gcc-10/changes.html
   4212    9. https://gcc.gnu.org/onlinedocs/10.2.0/
   4213   10. https://gcc.gnu.org/gcc-10/changes.html
   4214   11. https://gcc.gnu.org/onlinedocs/10.1.0/
   4215   12. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Contributors.html
   4216   13. https://gcc.gnu.org/index.html
   4217   14. mailto:gcc (a] gcc.gnu.org
   4218   15. https://gcc.gnu.org/mirrors.html
   4219   16. https://gcc.gnu.org/git.html
   4220   17. https://gcc.gnu.org/onlinedocs/
   4221   18. mailto:gcc-help (a] gcc.gnu.org
   4222   19. mailto:gcc (a] gcc.gnu.org
   4223   20. https://gcc.gnu.org/lists.html
   4224   21. https://www.fsf.org/
   4225   22. https://gcc.gnu.org/about.html
   4226 ======================================================================
   4227 http://gcc.gnu.org/gcc-10/changes.html
   4228 
   4229                              GCC 10 Release Series
   4230                         Changes, New Features, and Fixes
   4231 
   4232    This page is a "brief" summary of some of the huge number of
   4233    improvements in GCC 10. You may also want to check out our [1]Porting
   4234    to GCC 10 page and the [2]full GCC documentation.
   4235 
   4236 Caveats
   4237 
   4238      * An ABI incompatibility between C++14 and C++17 has been fixed. On
   4239        some targets a class with a zero-sized subobject would be passed
   4240        incorrectly when compiled as C++17 or C++20. See the [3]C++ notes
   4241        below for more details.
   4242      * The deprecated Profile Mode and array_allocator extensions have
   4243        been removed from libstdc++.
   4244      * The non-standard std::__is_nullptr_t type trait is deprecated and
   4245        will be removed from libstdc++ in a future release. The standard
   4246        trait std::is_null_pointer should be instead.
   4247      * The minimum version of the [4]MPFR library required for building
   4248        GCC has been increased to version 3.1.0 (released 2011-10-03).
   4249      * The automatic template instantiation at link time (-frepo) has been
   4250        removed.
   4251      * The --param allow-store-data-races internal parameter has been
   4252        removed in favor of a new official option -fallow-store-data-races.
   4253        While default behavior is unchanged and the new option allows to
   4254        correctly maintain a per compilation unit setting across link-time
   4255        optimization, alteration of the default via --param
   4256        allow-store-data-races will now be diagnosed and build systems have
   4257        to be adjusted accordingly.
   4258      * Offloading to Heterogeneous System Architecture Intermediate
   4259        Language (HSAIL) has been deprecated and will likely be removed in
   4260        a future release.
   4261      * The type of the std::iterator base class of
   4262        std::istreambuf_iterator was changed in C++98 mode to be consistent
   4263        with C++11 and later standards. See the [5]libstdc++ notes below
   4264        for more details.
   4265      * GCC 10.5 does not bootstrap with a C++98 compiler; if you need to
   4266        start from C++98, you should build 10.4 or 9.5 instead.
   4267 
   4268 [6]General Improvements
   4269 
   4270      * New built-in functions:
   4271           + The [7]__has_builtin built-in preprocessor operator can be
   4272             used to query support for built-in functions provided by GCC
   4273             and other compilers that support it.
   4274           + __builtin_roundeven for the corresponding function from
   4275             ISO/IEC TS 18661.
   4276      * New command-line options:
   4277           + [8]-fallocation-dce removes unneeded pairs of new and delete
   4278             operators.
   4279           + [9]-fprofile-partial-training can now be used to inform the
   4280             compiler that code paths not covered by the training run
   4281             should not be optimized for size.
   4282           + [10]-fprofile-reproducible controls level of reproducibility
   4283             of profile gathered by [11]-fprofile-generate. This makes it
   4284             possible to rebuild program with same outcome which is useful,
   4285             for example, for distribution packages.
   4286           + [12]-fprofile-prefix-path can be used in combination with
   4287             -fprofile-generate=profile_dir and -fprofile-use=profile_dir
   4288             to inform GCC where the base directory of build source tree is
   4289             in case it differs between instrumentation and optimized
   4290             builds.
   4291           + [13]-fanalyzer enables a new static analysis pass and
   4292             associated warnings. This pass performs a time-consuming
   4293             exploration of paths through the code in the hope of detecting
   4294             various common errors, such as double-free bugs. This option
   4295             should be regarded as experimental in this release. In
   4296             particular, analysis of non-C code is unlikely to work.
   4297      * Inter-procedural optimization improvements:
   4298           + The inter-procedural scalar replacement of aggregates
   4299             (IPA-SRA) pass was re-implemented to work at link-time and can
   4300             now also remove computing and returning unused return values.
   4301           + [14]-finline-functions is now enabled at -O2 and was retuned
   4302             for better code size versus runtime performance trade-offs.
   4303             Inliner heuristics was also significantly sped up to avoid
   4304             negative impact to -flto -O2 compile times.
   4305           + Inliner heuristics and function cloning can now use
   4306             value-range information to predict effectivity of individual
   4307             transformations.
   4308           + During link-time optimization the C++ One Definition Rule is
   4309             used to increase precision of type based alias analysis.
   4310      * Link-time optimization improvements:
   4311           + A new binary [15]lto-dump has been added. It dumps various
   4312             information about LTO bytecode object files.
   4313           + The parallel phase of the LTO can automatically detect a
   4314             running make's jobserver or fall back to number of available
   4315             cores.
   4316           + The LTO bytecode can be compressed with the [16]zstd
   4317             algorithm. The configure script automatically detects zstd
   4318             support.
   4319           + Most --param values can now be specified at translation unit
   4320             granularity. This includes all parameters controlling the
   4321             inliner and other inter-procedural optimizations. Unlike
   4322             earlier releases, GCC 10 will ignore parameters controlling
   4323             optimizations specified at link-time and apply parameters
   4324             specified at compile-time in the same manner as done for
   4325             optimization flags.
   4326      * Profile driven optimization improvements:
   4327           + Profile maintenance during compilation and hot/cold code
   4328             partitioning have been improved.
   4329           + Using [17]-fprofile-values, an instrumented binary can track
   4330             multiple values (up to 4) for e.g. indirect calls and provide
   4331             more precise profile information.
   4332 
   4333 [18]New Languages and Language-Specific Improvements
   4334 
   4335      * Version 2.6 of the [19]OpenACC specification is now supported by
   4336        the C, C++ and Fortran compilers. See the [20]implementation status
   4337        section on the OpenACC wiki page and the [21]run-time library
   4338        documentation for further information.
   4339      * GCC 10 adds a number of newly implemented [22]OpenMP 5.0 features
   4340        such as conditional lastprivate clause, scan and loop directives,
   4341        order(concurrent) and use_device_addr clauses support, if clause on
   4342        simd construct, and partial support for the declare variant
   4343        directive, getting closer to full support of the OpenMP 5.0
   4344        standard.
   4345      * OpenMP and OpenACC now support [23]offloading to AMD Radeon (GCN)
   4346        GPUs; supported are the third-generation Fiji (fiji) and the
   4347        fifth-generation VEGA 10/VEGA 20 (gfx900 or gfx906).
   4348 
   4349   [24]C family
   4350 
   4351      * New attributes:
   4352           + The access function and type attribute has been added to
   4353             describe how a function accesses objects passed to it by
   4354             pointer or reference, and to associate such arguments with
   4355             integer arguments denoting the objects' sizes. The attribute
   4356             is used to enable the detection of invalid accesses by
   4357             user-defined functions, such as those diagnosed by
   4358             -Wstringop-overflow.
   4359           + The symver attribute can be used to bind symbols to specific
   4360             version nodes on ELF platforms. This is preferred to using
   4361             inline assembly with GNU as symver directive because the
   4362             latter is not compatible with link-time optimizations.
   4363      * New warnings:
   4364           + [25]-Wstring-compare, enabled by -Wextra, warns about equality
   4365             and inequality expressions between zero and the result of a
   4366             call to either strcmp and strncmp that evaluate to a constant
   4367             as a result of the length of one argument being greater than
   4368             the size of the array pointed to by the other.
   4369           + [26]-Wzero-length-bounds, enabled by -Warray-bounds, warns
   4370             about accesses to elements of zero-length arrays that might
   4371             overlap other members of the same object.
   4372      * Enhancements to existing warnings:
   4373           + [27]-Warray-bounds detects more out-of-bounds accesses to
   4374             member arrays as well as accesses to elements of zero-length
   4375             arrays.
   4376           + [28]-Wformat-overflow makes full use of string length
   4377             information computed by the strlen optimization pass.
   4378           + [29]-Wrestrict detects overlapping accesses to dynamically
   4379             allocated objects.
   4380           + [30]-Wreturn-local-addr diagnoses more instances of return
   4381             statements returning addresses of automatic variables.
   4382           + [31]-Wstringop-overflow detects more out-of-bounds stores to
   4383             member arrays including zero-length arrays, dynamically
   4384             allocated objects and variable length arrays, as well as more
   4385             instances of reads of unterminated character arrays by string
   4386             built-in functions. The warning also detects out-of-bounds
   4387             accesses by calls to user-defined functions declared with the
   4388             new attribute access.
   4389           + [32]-Warith-conversion re-enables warnings from -Wconversion,
   4390             -Wfloat-conversion, and -Wsign-conversion that are now off by
   4391             default for an expression where the result of an arithmetic
   4392             operation will not fit in the target type due to promotion,
   4393             but the operands of the expression do fit in the target type.
   4394      * Extended characters in identifiers may now be specified directly in
   4395        the input encoding (UTF-8, by default), in addition to the UCN
   4396        syntax (\uNNNN or \UNNNNNNNN) that is already supported:
   4397 
   4398 static const int p = 3;
   4399 int get_nave_pi() {
   4400   return p;
   4401 }
   4402 
   4403   [33]C
   4404 
   4405      * Several new features from the upcoming C2X revision of the ISO C
   4406        standard are supported with -std=c2x and -std=gnu2x. Some of these
   4407        features are also supported as extensions when compiling for older
   4408        language versions. In addition to the features listed, some
   4409        features previously supported as extensions and now added to the C
   4410        standard are enabled by default in C2X mode and not diagnosed with
   4411        -std=c2x -Wpedantic.
   4412           + The [[]] attribute syntax is supported, as in C++. Existing
   4413             attributes can be used with this syntax in forms such as
   4414             [[gnu::const]]. The standard attributes [[deprecated]],
   4415             [[fallthrough]] and [[maybe_unused]] are supported.
   4416           + UTF-8 character constants using the u8'' syntax are supported.
   4417           + <float.h> defines macros FLT_NORM_MAX, DBL_NORM_MAX and
   4418             LDBL_NORM_MAX.
   4419           + When decimal floating-point arithmetic is supported, <float.h>
   4420             defines macros DEC32_TRUE_MIN, DEC64_TRUE_MIN and
   4421             DEC128_TRUE_MIN, in addition to the macros that were
   4422             previously only defined if __STDC_WANT_DEC_FP__ was defined
   4423             before including <float.h>.
   4424           + In C2X mode, empty parentheses in a function definition give
   4425             that function a type with a prototype for subsequent calls;
   4426             other old-style function definitions are diagnosed by default
   4427             in C2X mode.
   4428           + The strftime format checking supports the %OB and %Ob formats.
   4429           + In C2X mode, -fno-fp-int-builtin-inexact is enabled by
   4430             default.
   4431      * GCC now defaults to -fno-common. As a result, global variable
   4432        accesses are more efficient on various targets. In C, global
   4433        variables with multiple tentative definitions now result in linker
   4434        errors. With -fcommon such definitions are silently merged during
   4435        linking.
   4436 
   4437   [34]C++
   4438 
   4439      * Several C++20 features have been implemented:
   4440           + Concepts, including P0734R0, P0857R0, P1084R2, P1141R2,
   4441             P0848R3, P1616R1, P1452R2
   4442           + P1668R1, Permitting Unevaluated inline-assembly in constexpr
   4443             Functions
   4444           + P1161R3, Deprecate a[b,c]
   4445           + P0848R3, Conditionally Trivial Special Member Functions
   4446           + P1091R3, Extending structured bindings
   4447           + P1143R2, Adding the constinit keyword
   4448           + P1152R4, Deprecating volatile
   4449           + P0388R4, Permit conversions to arrays of unknown bound
   4450           + P0784R7, constexpr new
   4451           + P1301R4, [[nodiscard("with reason")]]
   4452           + P1814R0, class template argument deduction for alias templates
   4453           + P1816R0, class template argument deduction for aggregates
   4454           + P0960R3, Parenthesized initialization of aggregates
   4455           + P1331R2, Allow trivial default initialization in constexpr
   4456             contexts
   4457           + P1327R1, Allowing dynamic_cast and polymorphic typeid in
   4458             constexpr contexts
   4459           + P0912R5, Coroutines (requires -fcoroutines)
   4460      * Several C++ Defect Reports have been resolved, e.g.:
   4461           + DR 1560, lvalue-to-rvalue conversion in ?:
   4462           + DR 1813, __is_standard_layout for a class with repeated bases
   4463           + DR 2094, volatile scalars are trivially copyable,
   4464           + DR 2096, constraints on literal unions
   4465           + DR 2413, typename in conversion-function-ids
   4466           + DR 2352, Similar types and reference binding
   4467           + DR 1601, Promotion of enumeration with fixed underlying type
   4468           + DR 330, Qualification conversions and pointers to arrays of
   4469             pointers
   4470           + DR 1307, Overload resolution based on size of array
   4471             initializer-list
   4472           + DR 1710, Missing template keyword in class-or-decltype
   4473      * New warnings:
   4474           + [35]-Wmismatched-tags, disabled by default, warns about
   4475             declarations of structs, classes, and class templates and
   4476             their specializations with a class-key that does not match
   4477             either the definition or the first declaration if no
   4478             definition is provided. The option is provided to ease
   4479             portability to Windows-based compilers.
   4480           + [36]-Wredundant-tags, disabled by default, warns about
   4481             redundant class-key and enum-key in contexts where the key can
   4482             be eliminated without causing an syntactic ambiguity.
   4483      * G++ can now detect modifying constant objects in constexpr
   4484        evaluation (which is undefined behavior).
   4485      * G++ no longer emits bogus -Wsign-conversion warnings with explicit
   4486        casts.
   4487      * Narrowing is now detected in more contexts (e.g., case values).
   4488      * Memory consumption of the compiler has been reduced in constexpr
   4489        evaluation.
   4490      * The noexcept-specifier is now properly treated as a complete-class
   4491        context as per [class.mem].
   4492      * The attribute deprecated can now be used on namespaces too.
   4493      * The ABI of passing and returning certain C++ classes by value
   4494        changed on several targets in GCC 10, including [37]AArch64,
   4495        [38]ARM, [39]PowerPC ELFv2, [40]S/390 and [41]Itanium. These
   4496        changes affect classes with a zero-sized subobject (an empty base
   4497        class, or data member with the [[no_unique_address]] attribute)
   4498        where all other non-static data members have the same type (this is
   4499        called a "homogeneous aggregate" in some ABI specifications, or if
   4500        there is only one such member, a "single element"). In -std=c++17
   4501        and -std=c++20 modes, classes with an empty base class were not
   4502        considered to have a single element or to be a homogeneous
   4503        aggregate, and so could be passed differently (in the wrong
   4504        registers or at the wrong stack address). This could make code
   4505        compiled with -std=c++17 and -std=c++14 ABI incompatible. This has
   4506        been corrected and the empty bases are ignored in those ABI
   4507        decisions, so functions compiled with -std=c++14 and -std=c++17 are
   4508        now ABI compatible again. Example: struct empty {}; struct S :
   4509        empty { float f; }; void f(S);. Similarly, in classes containing
   4510        non-static data members with empty class types using the C++20
   4511        [[no_unique_address]] attribute, those members weren't ignored in
   4512        the ABI argument passing decisions as they should be. Both of these
   4513        ABI changes are now diagnosed with -Wpsabi.
   4514 
   4515     [42]Runtime Library (libstdc++)
   4516 
   4517      * Improved experimental C++2a support, including:
   4518           + Library concepts in <concepts> and <iterator>.
   4519           + Constrained algorithms in <ranges>, <algorithm>, and <memory>
   4520             (thanks to Patrick Palka).
   4521           + New algorithms shift_left and shift_right (thanks to Patrick
   4522             Palka).
   4523           + std::span (thanks to JeanHeyd Meneide).
   4524           + Three-way comparisons in <compare> and throughout the library.
   4525           + Constexpr support in <algorithm> and elsewhere (thanks to
   4526             Edward Smith-Rowland).
   4527           + <stop_token> and std::jthread (thanks to Thomas Rodgers).
   4528           + std::atomic_ref and std::atomic<floating point>.
   4529           + Integer comparison functions (cmp_equal, cmp_less etc.).
   4530           + std::ssize, std::to_array.
   4531           + std::construct_at, std::destroy, constexpr std::allocator.
   4532           + Mathematical constants in <numbers>.
   4533      * Support for RDSEED in std::random_device.
   4534      * Reduced header dependencies, leading to faster compilation for some
   4535        code.
   4536      * The std::iterator base class of std::istreambuf_iterator was
   4537        changed in C++98 mode to be consistent with C++11 and later
   4538        standards. This is expected to have no noticeable effect except in
   4539        the unlikely case of a class which has potentially overlapping
   4540        subobjects of type std::istreambuf_iterator<C> and another iterator
   4541        type with a std::iterator<input_iterator_tag, C, ...> base class.
   4542        The layout of such a type might change when compiled as C++98.
   4543        [43]Bug 92285 has more details and concrete examples.
   4544 
   4545   [44]D
   4546 
   4547      * Support for static foreach has been implemented.
   4548      * Aliases can now be created directly from any __traits that return
   4549        symbols or tuples. Previously, an AliasSeq was necessary in order
   4550        to alias their return.
   4551      * It is now possible to detect the language ABI specified for a
   4552        struct, class, or interface using __traits(getLinkage, ...).
   4553      * Support for core.math.toPrec intrinsics has been added. These
   4554        intrinsics guarantee the rounding to specific floating-point
   4555        precisions at specified points in the code.
   4556      * Support for pragma(inline) has been implemented. Previously the
   4557        pragma was recognized, but had no effect on the compilation.
   4558      * Optional parentheses in asm operands are deprecated and will be
   4559        removed in a future release.
   4560      * All content imported files are now included in the make dependency
   4561        list when compiling with -M.
   4562      * Compiler recognized attributes provided by the gcc.attribute module
   4563        will now take effect when applied to function prototypes as well as
   4564        when applied to full function declarations.
   4565      * Added a --enable-libphobos-checking configure option to control
   4566        whether run-time checks are compiled into the D runtime library.
   4567      * Added a --with-libphobos-druntime-only configure option to indicate
   4568        whether to build only the core D runtime library, or both the core
   4569        and standard libraries into libphobos.
   4570 
   4571   [45]Fortran
   4572 
   4573      * use_device_addr of version 5.0 of the [46]OpenMP specification is
   4574        now supported. Note that otherwise OpenMP 4.5 is partially
   4575        supported in the Fortran compiler; the largest missing item is
   4576        structure element mapping.
   4577      * The default buffer size for I/O using unformatted files has been
   4578        increased to 1048576. The buffer size for can now be set at runtime
   4579        via the environment variables GFORTRAN_FORMATTED_BUFFER_SIZE and
   4580        GFORTRAN_UNFORMATTED_BUFFER_SIZE for formatted and unformatted
   4581        files, respectively.
   4582      * Mismatches between actual and dummy argument lists in a single file
   4583        are now rejected with an error. Use the new option
   4584        -fallow-argument-mismatch to turn these errors into warnings; this
   4585        option is implied with -std=legacy. -Wargument-mismatch has been
   4586        removed.
   4587      * The handling of a BOZ literal constant has been reworked to provide
   4588        better conformance to the Fortran 2008 and 2018 standards. In these
   4589        Fortran standards, a BOZ literal constant is a typeless and
   4590        kindless entity. As a part of the rework, documented and
   4591        undocumented extensions to the Fortran standard now emit errors
   4592        during compilation. Some of these extensions are permitted with the
   4593        -fallow-invalid-boz option, which degrades the error to a warning
   4594        and the code is compiled as with older gfortran.
   4595      * At any optimization level except-Os, gfortran now uses inline
   4596        packing for arguments instead of calling a library routine. If the
   4597        source contains a large number of arguments that need to be
   4598        repacked, code size or time for compilation can become excessive.
   4599        If that is the case, -fno-inline-arg-packing can be used to disable
   4600        inline argument packing.
   4601      * Legacy extensions:
   4602           + For formatted input/output, if the explicit widths after the
   4603             data-edit descriptors I, F and G have been omitted, default
   4604             widths are used.
   4605           + A blank format item at the end of a format specification, i.e.
   4606             nothing following the final comma, is allowed. Use the option
   4607             -fdec-blank-format-item; this option is implied with -fdec.
   4608           + The existing support for AUTOMATIC and STATIC attributes has
   4609             been extended to allow variables with the AUTOMATIC attribute
   4610             to be used in EQUIVALENCE statements. Use -fdec-static; this
   4611             option is implied by -fdec.
   4612           + Allow character literals in assignments and DATA statements
   4613             for numeric (INTEGER, REAL, or COMPLEX) or LOGICAL variables.
   4614             Use the option -fdec-char-conversions; this option is implied
   4615             with -fdec.
   4616           + DEC comparisons, i.e. allow Hollerith constants to be used in
   4617             comparisons with INTEGER, REAL, COMPLEX and CHARACTER
   4618             expressions. Use the option -fdec.
   4619      * Character type names in errors and warnings now include len in
   4620        addition to kind; * is used for assumed length. The kind is omitted
   4621        if it is the default kind. Examples: CHARACTER(12), CHARACTER(6,4).
   4622      * CO_BROADCAST now supports derived type variables including objects
   4623        with allocatable components. In this case, the optional arguments
   4624        STAT= and ERRMSG= are currently ignored.
   4625      * The handling of module and submodule names has been reworked to
   4626        allow the full 63-character length mandated by the standard.
   4627        Previously symbol names were truncated if the combined length of
   4628        module, submodule, and function name exceeded 126 characters. This
   4629        change therefore breaks the ABI, but only for cases where this 126
   4630        character limit was exceeded.
   4631 
   4632   [47]Go
   4633 
   4634      * GCC 10 provides a complete implementation of the Go 1.14.6 user
   4635        packages.
   4636 
   4637 [48]libgccjit
   4638 
   4639      * The libgccjit API gained four new entry points:
   4640           + [49]gcc_jit_version_major, [50]gcc_jit_version_minor, and
   4641             [51]gcc_jit_version_patchlevel for programmatically checking
   4642             the libgccjit version from client code, and
   4643           + [52]gcc_jit_context_new_bitfield
   4644 
   4645 [53]New Targets and Target Specific Improvements
   4646 
   4647   [54]AArch64 & arm
   4648 
   4649      * The AArch64 and arm ports now support condition flag output
   4650        constraints in inline assembly, as indicated by the
   4651        __GCC_ASM_FLAG_OUTPUTS__. On arm this feature is only available for
   4652        A32 and T32 targets. Please refer to the documentation for more
   4653        details.
   4654 
   4655   [55]AArch64
   4656 
   4657      * There have been several improvements related to the Scalable Vector
   4658        Extension (SVE):
   4659           + The SVE ACLE types and intrinsics are now supported. They can
   4660             be accessed using the header file arm_sve.h.
   4661           + It is now possible to create fixed-length SVE types using the
   4662             arm_sve_vector_bits attribute. For example:
   4663 #if __ARM_FEATURE_SVE_BITS==512
   4664 typedef svint32_t vec512 __attribute__((arm_sve_vector_bits(512)));
   4665 typedef svbool_t pred512 __attribute__((arm_sve_vector_bits(512)));
   4666 #endif
   4667           + -mlow-precision-div, -mlow-precision-sqrt and
   4668             -mlow-precision-recip-sqrt now work for SVE.
   4669           + -msve-vector-bits=128 now generates vector-length-specific
   4670             code for little-endian targets. It continues to generate
   4671             vector-length-agnostic code for big-endian targets, just as
   4672             previous releases did for all targets.
   4673           + The vectorizer is now able to use extending loads and
   4674             truncating stores, including gather loads and scatter stores.
   4675           + The vectorizer now compares the cost of vectorizing with SVE
   4676             and vectorizing with Advanced SIMD and tries to pick the best
   4677             one. Previously it would always use SVE if possible.
   4678           + If a vector loop uses Advanced SIMD rather than SVE, the
   4679             vectorizer now considers using SVE to vectorize the left-over
   4680             elements (the "scalar tail" or "epilog").
   4681           + Besides these specific points, there have been many general
   4682             improvements to the way that the vectorizer uses SVE.
   4683      * The -mbranch-protection=pac-ret option now accepts the optional
   4684        argument +b-key extension to perform return address signing with
   4685        the B-key instead of the A-key.
   4686      * The option -moutline-atomics has been added to aid deployment of
   4687        the Large System Extensions (LSE) on GNU/Linux systems built with a
   4688        baseline architecture targeting Armv8-A. When the option is
   4689        specified code is emitted to detect the presence of LSE
   4690        instructions at runtime and use them for standard atomic
   4691        operations. For more information please refer to the documentation.
   4692      * The Transactional Memory Extension is now supported through ACLE
   4693        intrinsics. It can be enabled through the +tme option extension
   4694        (for example, -march=armv8.5-a+tme).
   4695      * A number of features from Armv8.5-A are now supported through ACLE
   4696        intrinsics. These include:
   4697           + The random number instructions that can be enabled through the
   4698             (already present in GCC 9.1) +rng option extension.
   4699           + Floating-point intrinsics to round to integer instructions
   4700             from Armv8.5-A when targeting -march=armv8.5-a or later.
   4701           + Memory Tagging Extension intrinsics enabled through the
   4702             +memtag option extension.
   4703      * Similarly, the following Armv8.6-A features are now supported
   4704        through ACLE intrinsics:
   4705           + The bfloat16 extension. This extension is enabled
   4706             automatically when Armv8.6-A is selected (such as by
   4707             -march=armv8.6-a). It can also be enabled for Armv8.2-A and
   4708             later using the +bf16 option extension.
   4709           + The Matrix Multiply extension. This extension is split into
   4710             three parts, one for each supported data type:
   4711                o Support for 8-bit integer matrix multiply instructions.
   4712                  This extension is enabled automatically when Armv8.6-A is
   4713                  selected. It can also be enabled for Armv8.2-A and later
   4714                  using the +i8mm option extension.
   4715                o Support for 32-bit floating-point matrix multiply
   4716                  instructions. This extension can be enabled using the
   4717                  +f32mm option extension, which also has the effect of
   4718                  enabling SVE.
   4719                o Support for 64-bit floating-point matrix multiply
   4720                  instructions. This extension can be enabled using the
   4721                  +f64mm option extension, which likewise has the effect of
   4722                  enabling SVE.
   4723      * SVE2 is now supported through ACLE intrinsics and (to a limited
   4724        extent) through autovectorization. It can be enabled through the
   4725        +sve2 option extension (for example, -march=armv8.5-a+sve2).
   4726        Additional extensions can be enabled through +sve2-sm4, +sve2-aes,
   4727        +sve2-sha3 and +sve2-bitperm.
   4728      * Support has been added for the following processors (GCC
   4729        identifiers in parentheses):
   4730           + Arm Cortex-A77 (cortex-a77).
   4731           + Arm Cortex-A76AE (cortex-a76ae).
   4732           + Arm Cortex-A65 (cortex-a65).
   4733           + Arm Cortex-A65AE (cortex-a65ae).
   4734           + Arm Cortex-A34 (cortex-a34).
   4735           + Marvell ThunderX3 (thunderx3t110).
   4736        The GCC identifiers can be used as arguments to the -mcpu or -mtune
   4737        options, for example: -mcpu=cortex-a77 or -mtune=cortex-a65ae or as
   4738        arguments to the equivalent target attributes and pragmas.
   4739 
   4740   [56]arm
   4741 
   4742      * Support for the FDPIC ABI has been added. It uses 64-bit function
   4743        descriptors to represent pointers to functions, and enables code
   4744        sharing on MMU-less systems. The corresponding target triple is
   4745        arm-uclinuxfdpiceabi, and the C library is uclibc-ng.
   4746      * Support has been added for the Arm EABI on NetBSD through the
   4747        arm*-*-netbsdelf-*eabi* triplet.
   4748      * The handling of 64-bit integer operations has been significantly
   4749        reworked and improved leading to improved performance and reduced
   4750        stack usage when using 64-bit integral data types. The option
   4751        -mneon-for-64bits is now deprecated and will be removed in a future
   4752        release.
   4753      * Support has been added for the following processors (GCC
   4754        identifiers in parentheses):
   4755           + Arm Cortex-A77 (cortex-a77).
   4756           + Arm Cortex-A76AE (cortex-a76ae).
   4757           + Arm Cortex-M35P (cortex-m35p).
   4758           + Arm Cortex-M55 (cortex-m55).
   4759        The GCC identifiers can be used as arguments to the -mcpu or -mtune
   4760        options, for example: -mcpu=cortex-a77 or -mtune=cortex-m35p.
   4761      * Support has been extended for the ACLE [57]data-processing
   4762        intrinsics to include 32-bit SIMD, saturating arithmetic, 16-bit
   4763        multiplication and other related intrinsics aimed at DSP algorithm
   4764        optimization.
   4765      * Support for -mpure-code in Thumb-1 (v6m) has been added: this
   4766        M-profile feature is no longer restricted to targets with MOVT. For
   4767        example, -mcpu=cortex-m0 now supports this option.
   4768      * Support for the [58]Armv8.1-M Mainline Architecture has been added.
   4769           + Armv8.1-M Mainline can be enabled by using the
   4770             -march=armv8.1-m.main command-line option.
   4771      * Support for the [59]MVE beta ACLE intrinsics has been added. These
   4772        intrinsics can be enabled by including the arm_mve.h header file
   4773        and passing the +mve or +mve.fp option extensions (for example:
   4774        -march=armv8.1-m.main+mve).
   4775      * Support for the Custom Datapath Extension beta ACLE [60]intrinsics
   4776        has been added.
   4777      * Support for Armv8.1-M Mainline Security Extensions architecture has
   4778        been added. The -mcmse option, when used in combination with an
   4779        Armv8.1-M Mainline architecture (for example: -march=armv8.1-m.main
   4780        -mcmse), now leads to the generation of improved code sequences
   4781        when changing security states.
   4782 
   4783   [61]AMD Radeon (GCN)
   4784 
   4785      * Code generation and in particular vectorization support have been
   4786        much improved.
   4787 
   4788   [62]ARC
   4789 
   4790      * The interrupt service routine functions save all used registers,
   4791        including extension registers and auxiliary registers used by Zero
   4792        Overhead Loops.
   4793      * Improve code size by using multiple short instructions instead of a
   4794        single long mov or ior instruction when its long immediate constant
   4795        is known.
   4796      * Fix usage of the accumulator register for ARC600.
   4797      * Fix issues with uncached attribute.
   4798      * Remove -mq-class option.
   4799      * Improve 64-bit integer addition and subtraction operations.
   4800 
   4801   [63]AVR
   4802 
   4803      * Support for the XMEGA-like devices
   4804 
   4805      ATtiny202, ATtiny204, ATtiny402, ATtiny404, ATtiny406, ATtiny804,
   4806      ATtiny806, ATtiny807, ATtiny1604, ATtiny1606, ATtiny1607, ATmega808,
   4807      ATmega809, ATmega1608, ATmega1609, ATmega3208, ATmega3209,
   4808      ATmega4808, ATmega4809
   4809        has been added.
   4810      * A new command-line option -nodevicespecs has been added. It allows
   4811        to provide a custom device-specs file by means of
   4812 
   4813      avr-gcc -nodevicespecs -specs=my-spec-file <options>
   4814        and without the need to provide options -B and -mmcu=. See [64]AVR
   4815        command-line options for details. This feature is also available in
   4816        GCC 9.3+ and GCC 8.4+.
   4817      * New command-line options -mdouble=[32,64] and -mlong-double=[32,64]
   4818        have been added. They allow to choose the size (in bits) of the
   4819        double and long double types, respectively. Whether or not the
   4820        mentioned layouts are available, whether the options act as a
   4821        multilib option, and the default for either option are controlled
   4822        by the new [65]AVR configure options --with-double= and
   4823        --with-long-double=.
   4824      * A new configure option --with-libf7= has been added. It controls to
   4825        which level avr-libgcc provides 64-bit floating point support by
   4826        means of [66]Libf7.
   4827      * A new configure option --with-double-comparison= has been added.
   4828        It's unlikely you need to set this option by hand.
   4829 
   4830   [67]IA-32/x86-64
   4831 
   4832      * Support to expand __builtin_roundeven into the appropriate SSE 4.1
   4833        instruction has been added.
   4834      * New ISA extension support for Intel ENQCMD was added to GCC. ENQCMD
   4835        intrinsics are available via the -menqcmd compiler switch.
   4836      * GCC now supports the Intel CPU named Cooperlake through
   4837        -march=cooperlake. The switch enables the AVX512BF16 ISA
   4838        extensions.
   4839      * GCC now supports the Intel CPU named Tigerlake through
   4840        -march=tigerlake. The switch enables the MOVDIRI MOVDIR64B
   4841        AVX512VP2INTERSECT ISA extensions.
   4842 
   4843   [68]MIPS
   4844 
   4845      * The mips*-*-linux* targets now mark object files with appropriate
   4846        GNU-stack note, facilitating use of non-executable stack hardening
   4847        on GNU/Linux. The soft-float targets have this feature enabled by
   4848        default, while for hard-float targets it is required for GCC to be
   4849        configured with --with-glibc-version=2.31 against glibc 2.31 or
   4850        later.
   4851 
   4852   [69]PowerPC / PowerPC64 / RS6000
   4853 
   4854      * Many vector builtins have been listed as deprecated in the
   4855        [70]64-Bit ELF V2 ABI Specification for quite a number of years.
   4856        The vector builtins listed in Tables A.8 through A.10 are now
   4857        deprecated for GCC 10, and will likely be removed from support in
   4858        GCC 11. Note that this does not result in any loss of function.
   4859        These deprecated builtins generally provide somewhat nonsensical
   4860        argument lists (for example, mixing signed, unsigned, and bool
   4861        vector arguments arbitrarily), or are duplicate builtins that are
   4862        inconsistent with the expected naming scheme. We expect that this
   4863        will be unlikely to affect much if any code, and any required code
   4864        changes will be trivial.
   4865 
   4866   [71]PRU
   4867 
   4868      * A new back end targeting TI PRU I/O processors has been contributed
   4869        to GCC.
   4870 
   4871   [72]RISC-V
   4872 
   4873      * The riscv*-*-* targets now require GNU binutils version 2.30 or
   4874        later, to support new assembly instructions produced by GCC.
   4875 
   4876   [73]V850
   4877 
   4878      * The ABI for V850 nested functions has been changed. Previously the
   4879        V850 port used %r20 for the static chain pointer, now the port uses
   4880        %r19. This corrects a long standing latent bug in the v850 port
   4881        where a call to a nested function would unexpectedly change the
   4882        value in %r20.
   4883 
   4884 [74]Operating Systems
   4885 
   4886 [75]Improvements for plugin authors
   4887 
   4888      * GCC diagnostics can now have a chain of events associated with
   4889        them, describing a path through the code that triggers the problem.
   4890        These can be printed by the diagnostics subsystem in various ways,
   4891        controlled by the [76]-fdiagnostics-path-format option, or captured
   4892        in JSON form via [77]-fdiagnostics-format=json.
   4893      * GCC diagnostics can now be associated with [78]CWE weakness
   4894        identifiers, which will appear on the standard error stream, and in
   4895        the JSON output from [79]-fdiagnostics-format=json.
   4896 
   4897 Other significant improvements
   4898 
   4899      * To allow inline expansion of both memcpy and memmove, the existing
   4900        movmem instruction patterns used for non-overlapping memory copies
   4901        have been renamed to cpymem. The movmem name is now used for
   4902        overlapping memory moves, consistent with the library functions
   4903        memcpy and memmove.
   4904      * For many releases, when GCC emits a warning it prints the option
   4905        controlling that warning. As of GCC 10, that option text is now a
   4906        clickable hyperlink for the documentation of that option (assuming
   4907        a [80]sufficiently capable terminal). This behavior can be
   4908        controlled via a new [81]-fdiagnostics-urls option (along with
   4909        various environment variables and heuristics documented with that
   4910        option).
   4911 
   4912 GCC 10.1
   4913 
   4914    This is the [82]list of problem reports (PRs) from GCC's bug tracking
   4915    system that are known to be fixed in the 10.1 release. This list might
   4916    not be complete (that is, it is possible that some PRs that have been
   4917    fixed are not listed here).
   4918 
   4919 [83]GCC 10.2
   4920 
   4921    This is the [84]list of problem reports (PRs) from GCC's bug tracking
   4922    system that are known to be fixed in the 10.2 release. This list might
   4923    not be complete (that is, it is possible that some PRs that have been
   4924    fixed are not listed here).
   4925 
   4926 [85]GCC 10.3
   4927 
   4928    This is the [86]list of problem reports (PRs) from GCC's bug tracking
   4929    system that are known to be fixed in the 10.3 release. This list might
   4930    not be complete (that is, it is possible that some PRs that have been
   4931    fixed are not listed here).
   4932 
   4933   Target Specific Changes
   4934 
   4935     AArch64
   4936 
   4937      * A bug with the Random Number intrinsics in the arm_acle.h header
   4938        that resulted in an incorrect status result being returned has been
   4939        fixed.
   4940      * GCC now supports the Fujitsu A64FX. The associated -mcpu and -mtune
   4941        options are -mcpu=a64fx and -mtune=a64fx respectively. In
   4942        particular, -mcpu=a64fx generates code for Armv8.2-A with SVE and
   4943        tunes the code for the A64FX. This includes tuning the SVE code,
   4944        although by default the code is still length-agnostic and so works
   4945        for all SVE implementations. Adding -msve-vector-bits=512 makes the
   4946        code specific to 512-bit SVE.
   4947 
   4948   x86-64
   4949 
   4950      * GCC 10.3 supports AMD CPUs based on the znver3 core via
   4951        -march=znver3.
   4952 
   4953 [87]GCC 10.4
   4954 
   4955    This is the [88]list of problem reports (PRs) from GCC's bug tracking
   4956    system that are known to be fixed in the 10.4 release. This list might
   4957    not be complete (that is, it is possible that some PRs that have been
   4958    fixed are not listed here).
   4959 
   4960   Target Specific Changes
   4961 
   4962     x86-64
   4963 
   4964      * The x86-64 ABI of passing and returning structures with a 64-bit
   4965        integer vector changed in GCC 10.1 when MMX is disabled. Disabling
   4966        MMX no longer changes how they are passed nor returned. This ABI
   4967        change is now diagnosed with -Wpsabi.
   4968 
   4969 [89]GCC 10.5
   4970 
   4971    This is the [90]list of problem reports (PRs) from GCC's bug tracking
   4972    system that are known to be fixed in the 10.5 release. This list might
   4973    not be complete (that is, it is possible that some PRs that have been
   4974    fixed are not listed here).
   4975 
   4976 
   4977     For questions related to the use of GCC, please consult these web
   4978     pages and the [91]GCC manuals. If that fails, the
   4979     [92]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   4980     web pages and the development of GCC are welcome on our developer
   4981     list at [93]gcc (a] gcc.gnu.org. All of [94]our lists have public
   4982     archives.
   4983 
   4984    Copyright (C) [95]Free Software Foundation, Inc. Verbatim copying and
   4985    distribution of this entire article is permitted in any medium,
   4986    provided this notice is preserved.
   4987 
   4988    These pages are [96]maintained by the GCC team. Last modified
   4989    2025-03-21.
   4990 
   4991 References
   4992 
   4993    1. https://gcc.gnu.org/gcc-10/porting_to.html
   4994    2. https://gcc.gnu.org/onlinedocs/index.html#current
   4995    3. https://gcc.gnu.org/gcc-10/changes.html#empty_base
   4996    4. https://www.mpfr.org/
   4997    5. https://gcc.gnu.org/gcc-10/changes.html#iterator_base
   4998    6. https://gcc.gnu.org/gcc-10/changes.html#general
   4999    7. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/cpp/_005f_005fhas_005fbuiltin.html#g_t_005f_005fhas_005fbuiltin
   5000    8. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Optimize-Options.html#index-fno-allocation-dce
   5001    9. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Optimize-Options.html#index-fprofile-partial-training
   5002   10. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Instrumentation-Options.html#index-fprofile-reproducible
   5003   11. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Instrumentation-Options.html#index-fprofile-generate
   5004   12. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Instrumentation-Options.html#index-fprofile-prefix-path
   5005   13. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Static-Analyzer-Options.html
   5006   14. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Optimize-Options.html#index-finline-functions
   5007   15. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/lto-dump.html
   5008   16. https://facebook.github.io/zstd/
   5009   17. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Optimize-Options.html#index-fprofile-values
   5010   18. https://gcc.gnu.org/gcc-10/changes.html#languages
   5011   19. https://www.openacc.org/
   5012   20. https://gcc.gnu.org/wiki/OpenACC/Implementation%20Status#status-10
   5013   21. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/libgomp/#toc-Enabling-OpenACC-1
   5014   22. https://www.openmp.org/specifications/
   5015   23. https://gcc.gnu.org/wiki/Offloading
   5016   24. https://gcc.gnu.org/gcc-10/changes.html#c-family
   5017   25. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Warning-Options.html#index-Wstring-compare
   5018   26. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Warning-Options.html#index-Wzero-length-bounds
   5019   27. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Warning-Options.html#index-Warray-bounds
   5020   28. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Warning-Options.html#index-Wformat-overflow
   5021   29. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Warning-Options.html#index-Wrestrict
   5022   30. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Warning-Options.html#index-Wreturn-local-addr
   5023   31. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Warning-Options.html#index-Wstringop-overflow
   5024   32. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Warning-Options.html#index-Warith-conversion
   5025   33. https://gcc.gnu.org/gcc-10/changes.html#c
   5026   34. https://gcc.gnu.org/gcc-10/changes.html#cxx
   5027   35. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wmismatched-tags
   5028   36. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wredundant-tags
   5029   37. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94383
   5030   38. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94711
   5031   39. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94707
   5032   40. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94704
   5033   41. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94706
   5034   42. https://gcc.gnu.org/gcc-10/changes.html#libstdcxx
   5035   43. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92285
   5036   44. https://gcc.gnu.org/gcc-10/changes.html#d
   5037   45. https://gcc.gnu.org/gcc-10/changes.html#fortran
   5038   46. https://www.openmp.org/specifications/
   5039   47. https://gcc.gnu.org/gcc-10/changes.html#go
   5040   48. https://gcc.gnu.org/gcc-10/changes.html#jit
   5041   49. https://gcc.gnu.org/onlinedocs/jit/topics/compatibility.html#c.gcc_jit_version_major
   5042   50. https://gcc.gnu.org/onlinedocs/jit/topics/compatibility.html#c.gcc_jit_version_minor
   5043   51. https://gcc.gnu.org/onlinedocs/jit/topics/compatibility.html#c.gcc_jit_version_patchlevel
   5044   52. https://gcc.gnu.org/onlinedocs/jit/topics/types.html#c.gcc_jit_context_new_bitfield
   5045   53. https://gcc.gnu.org/gcc-10/changes.html#targets
   5046   54. https://gcc.gnu.org/gcc-10/changes.html#arm-targets
   5047   55. https://gcc.gnu.org/gcc-10/changes.html#aarch64
   5048   56. https://gcc.gnu.org/gcc-10/changes.html#arm
   5049   57. https://developer.arm.com/documentation/101028/0009/Data-processing-intrinsics
   5050   58. https://developer.arm.com/Architectures/M-Profile%20Architecture
   5051   59. https://developer.arm.com/architectures/instruction-sets/intrinsics/
   5052   60. https://developer.arm.com/documentation/101028/0010/Custom-Datapath-Extension
   5053   61. https://gcc.gnu.org/gcc-10/changes.html#amdgcn
   5054   62. https://gcc.gnu.org/gcc-10/changes.html#arc
   5055   63. https://gcc.gnu.org/gcc-10/changes.html#avr
   5056   64. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/AVR-Options.html#index-nodevicespecs
   5057   65. https://gcc.gnu.org/install/configure.html#avr
   5058   66. https://gcc.gnu.org/wiki/avr-gcc#Libf7
   5059   67. https://gcc.gnu.org/gcc-10/changes.html#x86
   5060   68. https://gcc.gnu.org/gcc-10/changes.html#mips
   5061   69. https://gcc.gnu.org/gcc-10/changes.html#powerpc
   5062   70. https://openpowerfoundation.org/?resource_lib=64-bit-elf-v2-abi-specification-power-architecture
   5063   71. https://gcc.gnu.org/gcc-10/changes.html#pru
   5064   72. https://gcc.gnu.org/gcc-10/changes.html#riscv
   5065   73. https://gcc.gnu.org/gcc-10/changes.html#v850
   5066   74. https://gcc.gnu.org/gcc-10/changes.html#os
   5067   75. https://gcc.gnu.org/gcc-10/changes.html#plugins
   5068   76. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-path-format
   5069   77. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format
   5070   78. https://cwe.mitre.org/
   5071   79. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format
   5072   80. https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda
   5073   81. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-urls
   5074   82. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=10.0
   5075   83. https://gcc.gnu.org/gcc-10/changes.html#GCC10.2
   5076   84. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=10.2
   5077   85. https://gcc.gnu.org/gcc-10/changes.html#GCC10.3
   5078   86. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=10.3
   5079   87. https://gcc.gnu.org/gcc-10/changes.html#GCC10.4
   5080   88. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=10.4
   5081   89. https://gcc.gnu.org/gcc-10/changes.html#GCC10.5
   5082   90. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=10.5
   5083   91. https://gcc.gnu.org/onlinedocs/
   5084   92. mailto:gcc-help (a] gcc.gnu.org
   5085   93. mailto:gcc (a] gcc.gnu.org
   5086   94. https://gcc.gnu.org/lists.html
   5087   95. https://www.fsf.org/
   5088   96. https://gcc.gnu.org/about.html
   5089 ======================================================================
   5090 http://gcc.gnu.org/gcc-9/index.html
   5091 
   5092                               GCC 9 Release Series
   5093 
   5094    (This release series is no longer supported.)
   5095 
   5096    May 27, 2022
   5097 
   5098    The [1]GNU project and the GCC developers are pleased to announce the
   5099    release of GCC 9.5.
   5100 
   5101    This release is a bug-fix release, containing fixes for regressions in
   5102    GCC 9.4 relative to previous releases of GCC.
   5103 
   5104 Release History
   5105 
   5106    GCC 9.5
   5107           May 27, 2022 ([2]changes, [3]documentation)
   5108 
   5109    GCC 9.4
   5110           June 1, 2021 ([4]changes, [5]documentation)
   5111 
   5112    GCC 9.3
   5113           Mar 12, 2020 ([6]changes, [7]documentation)
   5114 
   5115    GCC 9.2
   5116           Aug 12, 2019 ([8]changes, [9]documentation)
   5117 
   5118    GCC 9.1
   5119           May 3, 2019 ([10]changes, [11]documentation)
   5120 
   5121 References and Acknowledgements
   5122 
   5123    GCC used to stand for the GNU C Compiler, but since the compiler
   5124    supports several other languages aside from C, it now stands for the
   5125    GNU Compiler Collection.
   5126 
   5127    The GCC developers would like to thank the numerous people that have
   5128    contributed new features, improvements, bug fixes, and other changes as
   5129    well as test results to GCC. This [12]amazing group of volunteers is
   5130    what makes GCC successful.
   5131 
   5132    For additional information about GCC please refer to the [13]GCC
   5133    project web site or contact the [14]GCC development mailing list.
   5134 
   5135    To obtain GCC please use [15]our mirror sites or [16]our version
   5136    control system.
   5137 
   5138 
   5139     For questions related to the use of GCC, please consult these web
   5140     pages and the [17]GCC manuals. If that fails, the
   5141     [18]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   5142     web pages and the development of GCC are welcome on our developer
   5143     list at [19]gcc (a] gcc.gnu.org. All of [20]our lists have public
   5144     archives.
   5145 
   5146    Copyright (C) [21]Free Software Foundation, Inc. Verbatim copying and
   5147    distribution of this entire article is permitted in any medium,
   5148    provided this notice is preserved.
   5149 
   5150    These pages are [22]maintained by the GCC team. Last modified
   5151    2024-05-30.
   5152 
   5153 References
   5154 
   5155    1. http://www.gnu.org/
   5156    2. https://gcc.gnu.org/gcc-9/changes.html
   5157    3. https://gcc.gnu.org/onlinedocs/9.5.0/
   5158    4. https://gcc.gnu.org/gcc-9/changes.html
   5159    5. https://gcc.gnu.org/onlinedocs/9.4.0/
   5160    6. https://gcc.gnu.org/gcc-9/changes.html
   5161    7. https://gcc.gnu.org/onlinedocs/9.3.0/
   5162    8. https://gcc.gnu.org/gcc-9/changes.html
   5163    9. https://gcc.gnu.org/onlinedocs/9.2.0/
   5164   10. https://gcc.gnu.org/gcc-9/changes.html
   5165   11. https://gcc.gnu.org/onlinedocs/9.1.0/
   5166   12. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Contributors.html
   5167   13. https://gcc.gnu.org/index.html
   5168   14. mailto:gcc (a] gcc.gnu.org
   5169   15. https://gcc.gnu.org/mirrors.html
   5170   16. https://gcc.gnu.org/git.html
   5171   17. https://gcc.gnu.org/onlinedocs/
   5172   18. mailto:gcc-help (a] gcc.gnu.org
   5173   19. mailto:gcc (a] gcc.gnu.org
   5174   20. https://gcc.gnu.org/lists.html
   5175   21. https://www.fsf.org/
   5176   22. https://gcc.gnu.org/about.html
   5177 ======================================================================
   5178 http://gcc.gnu.org/gcc-9/changes.html
   5179 
   5180                               GCC 9 Release Series
   5181                         Changes, New Features, and Fixes
   5182 
   5183    This page is a "brief" summary of some of the huge number of
   5184    improvements in GCC 9. You may also want to check out our [1]Porting to
   5185    GCC 9 page and the [2]full GCC documentation.
   5186 
   5187 Caveats
   5188 
   5189      * On Arm targets (arm*-*-*), [3]a bug in the implementation of the
   5190        procedure call standard (AAPCS) in the GCC 6, 7 and 8 releases has
   5191        been fixed: a structure containing a bit-field based on a 64-bit
   5192        integral type and where no other element in a structure required
   5193        64-bit alignment could be passed incorrectly to functions. This is
   5194        an ABI change. If the option -Wpsabi is enabled (on by default) the
   5195        compiler will emit a diagnostic note for code that might be
   5196        affected.
   5197      * Support for a number of older systems and recently unmaintained or
   5198        untested target ports of GCC has been declared obsolete in GCC 9.
   5199        Unless there is activity to revive them, the next release of GCC
   5200        will have their sources permanently removed.
   5201        The following ports for individual systems on particular
   5202        architectures have been obsoleted:
   5203           + Solaris 10 (*-*-solaris2.10). Details can be found in the
   5204             [4]announcement.
   5205           + Cell Broadband Engine SPU (spu*-*-*). Details can be found in
   5206             the [5]announcement.
   5207      * A change to the C++ std::rotate algorithm in GCC 9.1.0 can cause
   5208        ABI incompatibilities with object files compiled with other
   5209        versions of GCC. If the std::rotate algorithm is called with an
   5210        empty range then it might cause a divide-by-zero error (as a SIGFPE
   5211        signal) and crash. The change has been reverted for GCC 9.2.0 and
   5212        future releases. For more details see [6]Bug 90920. The problem can
   5213        be avoided by recompiling any objects that might call std::rotate
   5214        with an empty range, so that the GCC 9.1.0 definition of
   5215        std::rotate is not used.
   5216      * The automatic template instantiation at link time ([7]-frepo) has
   5217        been deprecated and will be removed in a future release.
   5218      * The --with-default-libstdcxx-abi=gcc4-compatible configure option
   5219        is broken in the 9.1 and 9.2 releases, producing a shared library
   5220        with missing symbols (see [8]Bug 90361). As a workaround, configure
   5221        without that option and build GCC as normal, then edit the
   5222        installed <bits/c++config.h> headers to define the
   5223        _GLIBCXX_USE_CXX11_ABI macro to 0.
   5224 
   5225 [9]General Improvements
   5226 
   5227    The following GCC command line options have been introduced or
   5228    improved.
   5229      * All command line options that take a byte-size argument accept
   5230        64-bit integers as well as standard SI and IEC suffixes such as kb
   5231        and KiB, MB and MiB, or GB and GiB denoting the corresponding
   5232        multiples of bytes. See [10]Invoking GCC for more.
   5233      * A new option [11]-flive-patching=[inline-only-static|inline-clone]
   5234        generates code suitable for live patching. At the same time it
   5235        provides multiple-level control over IPA optimizations. See the
   5236        user guide for more details.
   5237      * A new option, --completion, has been added to provide more fine
   5238        option completion in a shell. It is intended to be used by
   5239        Bash-completion.
   5240      * GCC's diagnostics now print source code with a left margin showing
   5241        line numbers, configurable with
   5242        [12]-fno-diagnostics-show-line-numbers.
   5243        GCC's diagnostics can also now label regions of the source code to
   5244        show pertinent information, such as the types within an expression.
   5245 $ g++ t.cc
   5246 t.cc: In function 'int test(const shape&, const shape&)':
   5247 t.cc:15:4: error: no match for 'operator+' (operand types are 'boxed_value<doubl
   5248 e>' and 'boxed_value<double>')
   5249    14 |   return (width(s1) * height(s1)
   5250       |           ~~~~~~~~~~~~~~~~~~~~~~
   5251       |                     |
   5252       |                     boxed_value<[...]>
   5253    15 |    + width(s2) * height(s2));
   5254       |    ^ ~~~~~~~~~~~~~~~~~~~~~~
   5255       |                |
   5256       |                boxed_value<[...]>
   5257 
   5258        These labels can be disabled via [13]-fno-diagnostics-show-labels.
   5259      * A new option [14]-fdiagnostics-format=json has been introduced for
   5260        emitting diagnostics in a machine-readable format.
   5261      * The alignment-related options [15]-falign-functions,
   5262        [16]-falign-labels, [17]-falign-loops, and [18]-falign-jumps
   5263        received support for a secondary alignment (e.g.
   5264        -falign-loops=n:m:n2:m2).
   5265      * New pair of profiling options ([19]-fprofile-filter-files and
   5266        [20]-fprofile-exclude-files) has been added. The options help to
   5267        filter which source files are instrumented.
   5268      * AddressSanitizer generates more compact redzones for automatic
   5269        variables. That helps to reduce memory footprint of a sanitized
   5270        binary.
   5271      * Numerous improvements have been made to the output of
   5272        [21]-fopt-info.
   5273        Messages are now prefixed with optimized, missed, or note, rather
   5274        than the old behavior of all being prefixed with note.
   5275        The output from -fopt-info can now contain information on inlining
   5276        decisions:
   5277 $ g++ -c inline.cc -O2 -fopt-info-inline-all
   5278 inline.cc:24:11: note: Considering inline candidate void foreach(T, T, void (*)(
   5279 E)) [with T = char**; E = char*]/2.
   5280 inline.cc:24:11: optimized:  Inlining void foreach(T, T, void (*)(E)) [with T =
   5281 char**; E = char*]/2 into int main(int, char**)/1.
   5282 inline.cc:19:12: missed:   not inlinable: void inline_me(char*)/0 -> int std::pu
   5283 ts(const char*)/3, function body not available
   5284 inline.cc:13:8: optimized:  Inlined void inline_me(char*)/4 into int main(int, c
   5285 har**)/1 which now has time 127.363637 and size 11, net change of +0.
   5286 Unit growth for small function inlining: 16->16 (0%)
   5287 
   5288 Inlined 2 calls, eliminated 1 functions
   5289 
   5290 
   5291        The output from the vectorizer has been rationalized so that failed
   5292        attempts to vectorize a loop are displayed in the form
   5293     [LOOP-LOCATION]: couldn't vectorize this loop
   5294     [PROBLEM-LOCATION]: because of [REASON]
   5295 
   5296        rather than an exhaustive log of all decisions made by the
   5297        vectorizer. For example:
   5298 $ gcc -c v.c -O3 -fopt-info-all-vec
   5299 v.c:7:3: missed: couldn't vectorize loop
   5300 v.c:10:7: missed: statement clobbers memory: __asm__ __volatile__("" :  :  : "me
   5301 mory");
   5302 v.c:3:6: note: vectorized 0 loops in function.
   5303 v.c:10:7: missed: statement clobbers memory: __asm__ __volatile__("" :  :  : "me
   5304 mory");
   5305 
   5306        The old behavior can be obtained via a new -internals suboption of
   5307        -fopt-info.
   5308      * A new option, [22]-fsave-optimization-record has been added, which
   5309        writes a SRCFILE.opt-record.json.gz file describing the
   5310        optimization decisions made by GCC. This is similar to the output
   5311        of -fopt-info, but with additional metadata such as the inlining
   5312        chain, and profile information (if available).
   5313      * Inter-procedural propagation of stack alignment can now be
   5314        controlled by [23]-fipa-stack-alignment.
   5315      * Propagation of addressability, readonly, and writeonly flags on
   5316        static variables can now be controlled by
   5317        [24]-fipa-reference-addressable.
   5318 
   5319    The following built-in functions have been introduced.
   5320      * [25]__builtin_expect_with_probability to provide branch prediction
   5321        probability hints to the optimizer.
   5322      * [26]__builtin_has_attribute determines whether a function, type, or
   5323        variable has been declared with some attribute.
   5324      * [27]__builtin_speculation_safe_value can be used to help mitigate
   5325        against unsafe speculative execution.
   5326 
   5327    The following attributes have been introduced.
   5328      * The [28]copy function attribute has been added. The attribute can
   5329        also be applied to type definitions and to variable declarations.
   5330 
   5331    A large number of improvements to code generation have been made,
   5332    including but not limited to the following.
   5333      * Switch expansion has been improved by using a different strategy
   5334        (jump table, bit test, decision tree) for a subset of switch cases.
   5335      * A linear function expression defined as a switch statement can be
   5336        transformed by [29]-ftree-switch-conversion. For example:
   5337 
   5338 int
   5339 foo (int how)
   5340 {
   5341   switch (how) {
   5342     case 2: how = 205; break;
   5343     case 3: how = 305; break;
   5344     case 4: how = 405; break;
   5345     case 5: how = 505; break;
   5346     case 6: how = 605; break;
   5347   }
   5348   return how;
   5349 }
   5350 
   5351        can be transformed into 100 * how + 5 (for values defined in the
   5352        switch statement).
   5353      * Inter-procedural optimization improvements:
   5354           + Inliner defaults were tuned to better suit modern C++
   5355             codebases, especially when built with link time-optimizations.
   5356             New parameters max-inline-insns-small, max-inline-insns-size,
   5357             uninlined-function-insns, uninlined-function-time,
   5358             uninlined-thunk-insns, and uninlined-thunk-time were added.
   5359           + Hot/cold partitioning is now more precise and aggressive.
   5360           + Improved scalability for very large translation units
   5361             (especially when link-time optimizing large programs).
   5362      * Profile driven optimization improvements:
   5363           + [30]-fprofile-use now enables [31]-fversion-loops-for-strides,
   5364             [32]-floop-interchange, [33]-floop-unroll-and-jam,
   5365             [34]-ftree-loop-distribution.
   5366           + Streaming of counter histograms was removed, which reduces the
   5367             size of profile files. Histograms are computed on the fly with
   5368             link-time optimization.
   5369           + The parameter hot-bb-count-ws-permille was reduced from 999 to
   5370             990 to account for more precise histograms.
   5371      * Link-time optimization improvements:
   5372           + Types are now simplified prior to streaming resulting in
   5373             significant reductions of LTO object file sizes and link-time
   5374             memory use as well as improvements of link-time parallelism.
   5375           + The default number of partitions (--param lto-partitions) was
   5376             increased from 32 to 128 enabling effective use of CPUs with
   5377             more than 32 hyperthreads. --param
   5378             lto-max-streaming-parallelism can now be used to control the
   5379             number of streaming processes.
   5380           + Warnings on C++ One Decl Rule violations (-Wodr) are now more
   5381             informative and produce fewer redundant results.
   5382        Overall compile time of Firefox 66 and LibreOffice 6.2.3 on an
   5383        8-core machine was reduced by about 5% compared to GCC 8.3, and the
   5384        size of LTO object files by 7%. LTO link time improves by 11% on an
   5385        8-core machine and scales significantly better for more parallel
   5386        build environments. The serial stage of the link-time optimization
   5387        is 28% faster consuming 20% less memory. The parallel stage now
   5388        scales to up to 128 partitions rather than 32 and reduces memory
   5389        use for every worker by 30%.
   5390 
   5391    The following improvements to the gcov command-line utility have been
   5392    made.
   5393      * The gcov tool received a new option [35]--use-hotness-colors (-q)
   5394        that can provide perf-like coloring of hot functions.
   5395      * The gcov tool has changed its intermediate format to a new JSON
   5396        format.
   5397 
   5398 [36]New Languages and Language specific improvements
   5399 
   5400    [37]OpenACC support in C, C++, and Fortran continues to be maintained
   5401    and improved. Most of the OpenACC 2.5 specification is implemented. See
   5402    the [38]implementation status section on the OpenACC wiki page for
   5403    further information.
   5404 
   5405   [39]C family
   5406 
   5407      * Version 5.0 of the [40]OpenMP specification is now partially
   5408        supported in the C and C++ compilers. For details which features of
   5409        OpenMP 5.0 are and which are not supported in the GCC 9 release see
   5410        [41]this mail.
   5411      * New extensions:
   5412           + [42]__builtin_convertvector built-in for vector conversions
   5413             has been added.
   5414      * New warnings:
   5415           + [43]-Waddress-of-packed-member, enabled by default, warns
   5416             about an unaligned pointer value from the address of a packed
   5417             member of a struct or union.
   5418      * Enhancements to existing warnings:
   5419           + [44]-Warray-bounds detects more instances of out-of-bounds
   5420             indices.
   5421           + [45]-Wattribute-alias also detects attribute mismatches
   5422             between alias declarations and their targets, in addition to
   5423             mismatches between their types.
   5424           + [46]-Wformat-overflow and [47]-Wformat-truncation have been
   5425             extended to all formatted input/output functions (where
   5426             applicable) and enhanced to detect a subset of instances of
   5427             reading past the end of unterminated constant character arrays
   5428             in %s directives.
   5429           + [48]-Wmissing-attributes detects instances of missing function
   5430             attributes on declarations of aliases and weak references.
   5431           + [49]-Wstringop-truncation also detects a subset of instances
   5432             of reading past the end of unterminated constant character
   5433             arrays,
   5434      * If a macro is used with the wrong argument count, the C and C++
   5435        front ends now show the definition of that macro via a note.
   5436      * The spelling corrector now considers transposed letters, and the
   5437        threshold for similarity has been tightened, to avoid nonsensical
   5438        suggestions.
   5439 
   5440   [50]C
   5441 
   5442      * There is now experimental support for -std=c2x, to select support
   5443        for the upcoming C2X revision of the ISO C standard. This standard
   5444        is in the early stages of development and the only feature
   5445        supported in GCC 9 is _Static_assert with a single argument
   5446        (support for _Static_assert with two arguments was added in C11 and
   5447        GCC 4.6). There are also new options -std=gnu2x, for C2X with GNU
   5448        extensions, and -Wc11-c2x-compat, to warn for uses of features
   5449        added in C2X (such warnings are also enabled by use of -Wpedantic
   5450        if not using -std=c2x or -std=gnu2x).
   5451      * New warnings:
   5452           + [51]-Wabsolute-value warns for calls to standard functions
   5453             that compute the absolute value of an argument when a more
   5454             appropriate standard function is available. For example,
   5455             calling abs(3.14) triggers the warning because the appropriate
   5456             function to call to compute the absolute value of a double
   5457             argument is fabs. The option also triggers warnings when the
   5458             argument in a call to such a function has an unsigned type.
   5459             This warning can be suppressed with an explicit type cast and
   5460             it is also enabled by -Wextra.
   5461 
   5462   [52]C++
   5463 
   5464      * New warnings:
   5465           + [53]-Wdeprecated-copy, implied by -Wextra, warns about the
   5466             C++11 deprecation of implicitly declared copy constructor and
   5467             assignment operator if one of them is user-provided.
   5468             -Wdeprecated-copy-dtor also warns if the destructor is
   5469             user-provided, as specified in C++11.
   5470           + [54]-Winit-list-lifetime, on by default, warns about uses of
   5471             std::initializer_list that are likely to result in a dangling
   5472             pointer, such as returning or assigning from a temporary list.
   5473           + [55]-Wredundant-move, implied by -Wextra, warns about
   5474             redundant calls to std::move.
   5475           + [56]-Wpessimizing-move, implied by -Wall, warns when a call to
   5476             std::move prevents copy elision.
   5477           + [57]-Wclass-conversion, on by default, warns when a conversion
   5478             function will never be called due to the type it converts to.
   5479      * The C++ front end has experimental support for some of the upcoming
   5480        C++2a draft features with the -std=c++2a or -std=gnu++2a flags,
   5481        including range-based for statements with initializer, default
   5482        constructible and assignable stateless lambdas, lambdas in
   5483        unevaluated contexts, language support for empty data members,
   5484        allowing pack expansion in lambda init-capture, likely and unlikely
   5485        attributes, class types in non-type template parameters, allowing
   5486        virtual function calls in constant expressions, explicit(bool),
   5487        std::is_constant_evaluated, nested inline namespaces, etc. For a
   5488        full list of new features, see [58]the C++ status page.
   5489      * The C++ front end now preserves source locations for literals,
   5490        id-expression, and mem-initializer for longer. For example it is
   5491        now able to pin-point the pertinent locations for bad
   5492        initializations such as these
   5493 $ g++ -c bad-inits.cc
   5494 bad-inits.cc:10:14: error: cannot convert 'json' to 'int' in initialization
   5495    10 |   { 3, json::object },
   5496       |        ~~~~~~^~~~~~
   5497       |              |
   5498       |              json
   5499 bad-inits.cc:14:31: error: initializer-string for array of chars is too long [-f
   5500 permissive]
   5501    14 | char buffers[3][5] = { "red", "green", "blue" };
   5502       |                               ^~~~~~~
   5503 bad-inits.cc: In constructor 'X::X()':
   5504 bad-inits.cc:17:13: error: invalid conversion from 'int' to 'void*' [-fpermissiv
   5505 e]
   5506    17 |   X() : one(42), two(42), three(42)
   5507       |             ^~
   5508       |             |
   5509       |             int
   5510 
   5511        rather than emitting the error at the final closing parenthesis or
   5512        brace.
   5513      * Error-reporting of overload resolution has been special-cased to
   5514        make the case of a single failed candidate easier to read. For
   5515        example:
   5516 $ g++ param-type-mismatch.cc
   5517 param-type-mismatch.cc: In function 'int test(int, const char*, float)':
   5518 param-type-mismatch.cc:8:32: error: cannot convert 'const char*' to 'const char*
   5519 *'
   5520     8 |   return foo::member_1 (first, second, third);
   5521       |                                ^~~~~~
   5522       |                                |
   5523       |                                const char*
   5524 param-type-mismatch.cc:3:46: note:   initializing argument 2 of 'static int foo:
   5525 :member_1(int, const char**, float)'
   5526     3 |   static int member_1 (int one, const char **two, float three);
   5527       |                                 ~~~~~~~~~~~~~^~~
   5528 
   5529        highlights both the problematic argument, and the parameter that it
   5530        can't be converted to.
   5531      * Diagnostics involving binary operators now use color to distinguish
   5532        the two operands, and label them separately (as per the example of
   5533        source labelling above).
   5534      * Diagnostics involving function calls now highlight the pertinent
   5535        parameter of the declaration in more places.
   5536 $ g++ bad-conversion.cc
   5537 bad-conversion.cc: In function 'void caller()':
   5538 bad-conversion.cc:9:14: error: cannot convert 'bool' to 'void*'
   5539     9 |   callee (0, false, 2);
   5540       |              ^~~~~
   5541       |              |
   5542       |              bool
   5543 bad-conversion.cc:3:19: note:   initializing argument 2 of 'void callee(int, voi
   5544 d*, int)'
   5545     3 | void callee (int, void *, int)
   5546       |                   ^~~~~~
   5547 
   5548      * The C++ front end's implementation of [59]-Wformat now shows
   5549        precise locations within string literals, and underlines the
   5550        pertinent arguments at bogus call sites (the C front end has been
   5551        doing this since GCC 7). For example:
   5552 $ g++ -c bad-printf.cc -Wall
   5553 bad-printf.cc: In function 'void print_field(const char*, float, long int, long
   5554 int)':
   5555 bad-printf.cc:6:17: warning: field width specifier '*' expects argument of type
   5556 'int', but argument 3 has type 'long int' [-Wformat=]
   5557     6 |   printf ("%s: %*ld ", fieldname, column - width, value);
   5558       |                ~^~~               ~~~~~~~~~~~~~~
   5559       |                 |                        |
   5560       |                 int                      long int
   5561 bad-printf.cc:6:19: warning: format '%ld' expects argument of type 'long int', b
   5562 ut argument 4 has type 'double' [-Wformat=]
   5563     6 |   printf ("%s: %*ld ", fieldname, column - width, value);
   5564       |                ~~~^                               ~~~~~
   5565       |                   |                               |
   5566       |                   long int                        double
   5567       |                %*f
   5568 
   5569      * The C++ front end has gained new fix-it hints for forgetting the
   5570        return *this; needed by various C++ operators:
   5571 $ g++ -c operator.cc
   5572 operator.cc: In member function 'boxed_ptr& boxed_ptr::operator=(const boxed_ptr
   5573 &)':
   5574 operator.cc:7:3: warning: no return statement in function returning non-void [-W
   5575 return-type]
   5576     6 |     m_ptr = other.m_ptr;
   5577   +++ |+    return *this;
   5578     7 |   }
   5579       |   ^
   5580 
   5581        for when the compiler needs a typename:
   5582 $ g++ -c template.cc
   5583 template.cc:3:3: error: need 'typename' before 'Traits::type' because 'Traits' i
   5584 s a dependent scope
   5585     3 |   Traits::type type;
   5586       |   ^~~~~~
   5587       |   typename
   5588 
   5589        when trying to use an accessor member as if it were a data member:
   5590 $ g++ -c fncall.cc
   5591 fncall.cc: In function 'void hangman(const mystring&)':
   5592 fncall.cc:12:11: error: invalid use of member function 'int mystring::get_length
   5593 () const' (did you forget the '()' ?)
   5594    12 |   if (str.get_length > 0)
   5595       |       ~~~~^~~~~~~~~~
   5596       |                     ()
   5597 
   5598        for C++11's scoped enums:
   5599 $ g++ -c enums.cc
   5600 enums.cc: In function 'void json::test(const json::value&)':
   5601 enums.cc:12:26: error: 'STRING' was not declared in this scope; did you mean 'js
   5602 on::kind::STRING'?
   5603    12 |     if (v.get_kind () == STRING)
   5604       |                          ^~~~~~
   5605       |                          json::kind::STRING
   5606 enums.cc:3:44: note: 'json::kind::STRING' declared here
   5607     3 |   enum class kind { OBJECT, ARRAY, NUMBER, STRING, TRUE, FALSE, NULL_ };
   5608       |                                            ^~~~~~
   5609 
   5610        and a tweak to integrate the suggestions about misspelled members
   5611        with that for accessors:
   5612 $ g++ -c accessor-fixit.cc
   5613 accessor-fixit.cc: In function 'int test(t*)':
   5614 accessor-fixit.cc:17:15: error: 'class t' has no member named 'ratio'; did you m
   5615 ean 'int t::m_ratio'? (accessible via 'int t::get_ratio() const')
   5616    17 |   return ptr->ratio;
   5617       |               ^~~~~
   5618       |               get_ratio()
   5619 
   5620        In addition, various diagnostics in the C++ front-end have been
   5621        streamlined by consolidating the suggestion into the initial error,
   5622        rather than emitting a follow-up note:
   5623 $ g++ typo.cc
   5624 typo.cc:5:13: error: 'BUFSIZE' was not declared in this scope; did you mean 'BUF
   5625 _SIZE'?
   5626     5 | uint8_t buf[BUFSIZE];
   5627       |             ^~~~~~~
   5628       |             BUF_SIZE
   5629 
   5630     [60]Runtime Library (libstdc++)
   5631 
   5632      * Improved support for C++17, including:
   5633           + The C++17 implementation is no longer experimental.
   5634           + Parallel algorithms and <execution> (requires [61]Thread
   5635             Building Blocks 2018 or newer).
   5636           + <memory_resource>.
   5637           + Using the types and functions in <filesystem> does not require
   5638             linking with -lstdc++fs now.
   5639      * Improved experimental support for C++2a, including:
   5640           + Type traits std::remove_cvref, std::unwrap_reference,
   5641             std::unwrap_decay_ref, std::is_nothrow_convertible, and
   5642             std::type_identity.
   5643           + Headers <bit> and <version>.
   5644           + Uniform container erasure (std::erase_if).
   5645           + contains member of maps and sets.
   5646           + String prefix and suffix checking (starts_with, ends_with).
   5647           + Functions std::midpoint and std::lerp for interpolation.
   5648           + std::bind_front.
   5649           + std::visit<R>.
   5650           + std::assume_aligned.
   5651           + Uses-allocator construction utilities.
   5652           + std::pmr::polymorphic_allocator<std::byte>.
   5653           + Library support for char8_t type.
   5654           + Destroying delete.
   5655           + std::is_constant_evaluated() function.
   5656      * Support for opening file streams with wide character paths on
   5657        Windows
   5658      * Incomplete support for the C++17 Filesystem library and the
   5659        Filesystem TS on Windows.
   5660      * Incomplete, experimental support for the Networking TS.
   5661 
   5662   [62]D
   5663 
   5664      * Support for the D programming language has been added to GCC,
   5665        implementing version 2.076 of the language and run-time library.
   5666 
   5667   [63]Fortran
   5668 
   5669      * Asynchronous I/O is now fully supported. The program needs to be
   5670        linked against the pthreads library to use it, otherwise the I/O is
   5671        done synchronously. For systems which do not support POSIX
   5672        condition variables, such as AIX, all I/O is still done
   5673        synchronously.
   5674      * The BACK argument for MINLOC and MAXLOC has been implemented.
   5675      * The FINDLOC intrinsic function has been implemented.
   5676      * The IS_CONTIGUOUS intrinsic function has been implemented.
   5677      * Direct access to the real and imaginary parts of a complex variable
   5678        via c%re and c%im has been implemented.
   5679      * Type parameter inquiry via str%len and a%kind has been implemented.
   5680      * C descriptors and the ISO_Fortran_binding.h source file have been
   5681        implemented.
   5682      * The MAX and MIN intrinsics are no longer guaranteed to return any
   5683        particular value in case one of the arguments is a NaN. Note that
   5684        this conforms to the Fortran standard and to what other Fortran
   5685        compilers do. If there is a need to handle that case in some
   5686        specific way, one needs to explicitly check for NaN's before
   5687        calling MAX or MIN, e.g. by using the IEEE_IS_NAN function from the
   5688        intrinsic module IEEE_ARITHMETIC.
   5689      * A new command-line option [64]-fdec-include, set also by the
   5690        [65]-fdec option, has been added to increase compatibility with
   5691        legacy code. With this option, an INCLUDE directive is also parsed
   5692        as a statement, which allows the directive to be spread across
   5693        multiple source lines with line continuations.
   5694      * A new [66]BUILTIN directive, has been added. The purpose of the
   5695        directive is to provide an API between the GCC compiler and the GNU
   5696        C Library which would define vector implementations of math
   5697        routines.
   5698 
   5699   [67]Go
   5700 
   5701      * GCC 9 provides a complete implementation of the Go 1.12.2 user
   5702        packages.
   5703 
   5704 [68]libgccjit
   5705 
   5706      * The libgccjit API gained a new entry point:
   5707        [69]gcc_jit_context_add_driver_option.
   5708 
   5709 [70]New Targets and Target Specific Improvements
   5710 
   5711   [71]AArch64 & Arm
   5712 
   5713      * Support has been added for the following processors (GCC
   5714        identifiers in parentheses):
   5715           + Arm Cortex-A76 (cortex-a76).
   5716           + Arm Cortex-A55/Cortex-A76 DynamIQ big.LITTLE
   5717             (cortex-a76.cortex-a55).
   5718           + Arm Neoverse N1 (neoverse-n1).
   5719        The GCC identifiers can be used as arguments to the -mcpu or -mtune
   5720        options, for example: -mcpu=cortex-a76 or
   5721        -mtune=cortex-a76.cortex-a55 or as arguments to the equivalent
   5722        target attributes and pragmas.
   5723      * The Armv8.3-A complex number instructions are now supported via
   5724        intrinsics when the option -march=armv8.3-a or equivalent is
   5725        specified. For the half-precision floating-point variants of these
   5726        instructions use the architecture extension flag +fp16, e.g.
   5727        -march=armv8.3-a+fp16.
   5728        The intrinsics are defined by the ACLE specification.
   5729      * The Armv8.5-A architecture is now supported through the
   5730        -march=armv8.5-a option.
   5731      * The Armv8.5-A architecture also adds some security features that
   5732        are optional to all older architecture versions. These are now
   5733        supported and only affect the assembler.
   5734           + Speculation Barrier instruction through the -march=armv8-a+sb
   5735             option.
   5736           + Execution and Data Prediction Restriction instructions through
   5737             the -march=armv8-a+predres option.
   5738           + Speculative Store Bypass Safe instruction through the
   5739             -march=armv8-a+ssbs option. This does not require a compiler
   5740             option for Arm and thus -march=armv8-a+ssbs is an
   5741             AArch64-specific option.
   5742 
   5743       AArch64 specific
   5744 
   5745      * Support has been added for the Arm Neoverse E1 processor
   5746        (-mcpu=neoverse-e1).
   5747      * The AArch64 port now has support for stack clash protection using
   5748        the [72]-fstack-clash-protection option. The probing interval/guard
   5749        size can be set by using --param
   5750        stack-clash-protection-guard-size=12|16. The value of this
   5751        parameter must be in bytes represented as a power of two. The two
   5752        supported values for this parameter are 12 (for a 4KiB size, 2^12)
   5753        and 16 (for a 64KiB size, 2^16). The default value is 16 (64Kb) and
   5754        can be changed at configure time using the flag
   5755        --with-stack-clash-protection-guard-size=12|16.
   5756      * The option -msign-return-address= has been deprecated. This has
   5757        been replaced by the new -mbranch-protection= option. This new
   5758        option can now be used to enable the return address signing as well
   5759        as the new Branch Target Identification feature of Armv8.5-A
   5760        architecture. For more information on the arguments accepted by
   5761        this option, please refer to [73]AArch64-Options.
   5762      * The following optional extensions to Armv8.5-A architecture are now
   5763        supported and only affect the assembler.
   5764           + Random Number Generation instructions through the
   5765             -march=armv8.5-a+rng option.
   5766           + Memory Tagging Extension through the -march=armv8.5-a+memtag
   5767             option.
   5768 
   5769       Arm specific
   5770 
   5771      * Support for the deprecated Armv2 and Armv3 architectures and their
   5772        variants has been removed. Their corresponding -march values and
   5773        the -mcpu options that used these architectures have been removed.
   5774      * Support for the Armv5 and Armv5E architectures (which have no known
   5775        implementations) has been removed. Note that Armv5T, Armv5TE and
   5776        Armv5TEJ architectures remain supported.
   5777      * Corrected FPU configurations for Cortex-R7 and Cortex-R8 when using
   5778        their respective -mcpu options.
   5779 
   5780   [74]AMD GCN
   5781 
   5782      * A new back end targeting AMD GCN GPUs has been contributed to GCC.
   5783        The implementation is currently limited to compiling
   5784        single-threaded, stand-alone programs. Future versions will add
   5785        support for offloading multi-threaded kernels via OpenMP and
   5786        OpenACC. The following devices are supported (GCC identifiers in
   5787        parentheses):
   5788           + Fiji (fiji).
   5789           + Vega 10 (gfx900).
   5790 
   5791   [75]ARC
   5792 
   5793      * LRA is now on by default for the ARC target. This can be controlled
   5794        by -mlra.
   5795      * Add support for frame code-density and branch-and-index
   5796        instructions.
   5797 
   5798   [76]C-SKY
   5799 
   5800      * A new back end targeting C-SKY V2 processors has been contributed
   5801        to GCC.
   5802 
   5803   [77]IA-32/x86-64
   5804 
   5805      * Support of Intel MPX (Memory Protection Extensions) has been
   5806        removed.
   5807      * New ISA extension support for Intel PTWRITE was added to GCC.
   5808        PTWRITE intrinsics are available via the -mptwrite compiler switch.
   5809      * GCC now supports the Intel CPU named Cascade Lake with AVX512
   5810        extensions through -march=cascadelake. The switch enables the
   5811        following ISA extensions: AVX512F, AVX512VL, AVX512CD, AVX512BW,
   5812        AVX512DQ, AVX512VNNI.
   5813 
   5814   [78]MIPS
   5815 
   5816      * The Loongson loongson-mmi and loongson-ext extensions have been
   5817        split from loongson3a:
   5818           + loongson-mmi contains the Loongson MMI (MultiMedia extensions
   5819             Instructions).
   5820           + loongson-ext contains the Loongson EXT (EXTensions
   5821             instructions).
   5822      * The Loongson EXT2 (EXTensions R2 instructions) are now supported.
   5823           + loongson-ext2 contains the Loongson EXT2 instructions.
   5824        Command-line options-m[no-]loongson-mmi, -m[no-]loongson-ext, and
   5825        -m[no-]loongson-ext2 enable or disable those extensions.
   5826      * Support has been added for the following processors (GCC
   5827        identifiers in parentheses):
   5828           + Loongson 3A1000 (gs464) which enables loongson-mmi,
   5829             loongson-ext by default.
   5830           + Loongson 3A2000/3A3000 (gs464e) which enables loongson-mmi,
   5831             loongson-ext, loongson-ext2 by default.
   5832           + Loongson 2K1000 (gs264e) which enables loongson-ext,
   5833             loongson-ext2, msa by default.
   5834        The GCC identifiers can be used as arguments to the -mcpu and
   5835        -mtune options (as in -mcpu=gs464 or -mtune=gs464e) or as arguments
   5836        to the equivalent target attributes and pragmas.
   5837 
   5838   [79]OpenRISC
   5839 
   5840      * A new back end targeting OpenRISC processors has been contributed
   5841        to GCC.
   5842 
   5843   [80]S/390, System z, IBM z Systems
   5844 
   5845      * Support for the arch13 architecture has been added. When using the
   5846        -march=arch13 option, the compiler will generate code making use of
   5847        the new instructions introduced with the vector enhancement
   5848        facility 2 and the miscellaneous instruction extension facility 2.
   5849        The -mtune=arch13 option enables arch13 specific instruction
   5850        scheduling without making use of new instructions.
   5851      * Builtins for the new vector instructions have been added and can be
   5852        enabled using the -mzvector option.
   5853      * Support for ESA architecture machines g5 and g6 is deprecated since
   5854        GCC 6.1.0 and has been removed now.
   5855      * When compiling with -march=z14 or higher GCC emits alignments hints
   5856        on the vector load/store instructions (8 or 16 byte).
   5857      * Functions now have a default alignment of 16 bytes. This helps with
   5858        branch prediction effects.
   5859      * -mfentry is now supported. As well as the mcount mechanism the
   5860        __fentry__ is called before the function prologue. However, since
   5861        just a single instruction is required to call __fentry__ the call
   5862        sequence imposes a smaller overhead than mcount (4 instructions).
   5863        The produced code is compatible only with newer glibc versions,
   5864        which provide the __fentry__ symbol and do not clobber r0 when
   5865        resolving lazily bound functions. -mfentry is only supported when
   5866        generating 64-bit code and does not work with nested C functions.
   5867      * The -mnop-mcount option can be used to emit NOP instructions
   5868        instead of an mcount or fentry call stub.
   5869      * With the -mrecord-mcount option a __mcount_loc section is generated
   5870        containing pointers to each profiling call stub. This is useful for
   5871        automatically patching in and out calls.
   5872 
   5873 [81]Operating Systems
   5874 
   5875   [82]Solaris
   5876 
   5877      * g++ now unconditionally enables large file support when compiling
   5878        32-bit code.
   5879      * Support for the AddressSanitizer and UndefinedBehaviorSanitizer has
   5880        been merged from LLVM. For the moment, this only works for 32-bit
   5881        code on both SPARC and x86.
   5882      * An initial port of the D runtime library has been completed on
   5883        Solaris 11/x86. It requires the use of GNU as. Solaris 11/SPARC
   5884        support is still work-in-progress.
   5885 
   5886   [83]Windows
   5887 
   5888      * A C++ Microsoft ABI bitfield layout bug, [84]PR87137 has been
   5889        fixed. A non-field declaration could cause the current bitfield
   5890        allocation unit to be completed, incorrectly placing a following
   5891        bitfield into a new allocation unit. The Microsoft ABI is selected
   5892        for:
   5893           + Mingw targets
   5894           + PowerPC, IA-32 or x86-64 targets when the -mms-bitfields
   5895             option is specified, or __attribute__((ms_struct)) is used
   5896           + SuperH targets when the -mhitachi option is specified, or
   5897             __attribute__((renesas)) is used
   5898 
   5899 [85]Improvements for plugin authors
   5900 
   5901      * GCC's diagnostic subsystem now has a way to logically group
   5902        together related diagnostics, auto_diagnostic_group. Such
   5903        diagnostics will be nested by the output of
   5904        [86]-fdiagnostics-format=json.
   5905      * GCC now has a set of [87]user experience guidelines for GCC, with
   5906        information and advice on implementing new diagnostics.
   5907 
   5908 Other significant improvements
   5909 
   5910      * GCC's internal "selftest" suite now runs for C++ as well as C (in
   5911        debug builds of the compiler).
   5912 
   5913 [88]GCC 9.1
   5914 
   5915    This is the [89]list of problem reports (PRs) from GCC's bug tracking
   5916    system that are known to be fixed in the 9.1 release. This list might
   5917    not be complete (that is, it is possible that some PRs that have been
   5918    fixed are not listed here).
   5919 
   5920 [90]GCC 9.2
   5921 
   5922    This is the [91]list of problem reports (PRs) from GCC's bug tracking
   5923    system that are known to be fixed in the 9.2 release. This list might
   5924    not be complete (that is, it is possible that some PRs that have been
   5925    fixed are not listed here).
   5926 
   5927 [92]GCC 9.3
   5928 
   5929    This is the [93]list of problem reports (PRs) from GCC's bug tracking
   5930    system that are known to be fixed in the 9.3 release. This list might
   5931    not be complete (that is, it is possible that some PRs that have been
   5932    fixed are not listed here).
   5933 
   5934 [94]GCC 9.4
   5935 
   5936    This is the [95]list of problem reports (PRs) from GCC's bug tracking
   5937    system that are known to be fixed in the 9.4 release. This list might
   5938    not be complete (that is, it is possible that some PRs that have been
   5939    fixed are not listed here).
   5940 
   5941   Target Specific Changes
   5942 
   5943     AArch64
   5944 
   5945      * The option -moutline-atomics has been added to aid deployment of
   5946        the Large System Extensions (LSE) on GNU/Linux systems built with a
   5947        baseline architecture targeting Armv8-A. When the option is
   5948        specified code is emitted to detect the presence of LSE
   5949        instructions at run time and use them for standard atomic
   5950        operations. For more information please refer to the documentation.
   5951      * GCC now supports the Fujitsu A64FX. The associated -mcpu and -mtune
   5952        options are -mcpu=a64fx and -mtune=a64fx respectively. In
   5953        particular, -mcpu=a64fx generates code for Armv8.2-A with SVE and
   5954        tunes the code for the A64FX. This includes tuning the SVE code,
   5955        although by default the code is still length-agnostic and so works
   5956        for all SVE implementations. Adding -msve-vector-bits=512 makes the
   5957        code specific to 512-bit SVE.
   5958 
   5959 [96]GCC 9.5
   5960 
   5961    This is the [97]list of problem reports (PRs) from GCC's bug tracking
   5962    system that are known to be fixed in the 9.5 release. This list might
   5963    not be complete (that is, it is possible that some PRs that have been
   5964    fixed are not listed here).
   5965 
   5966 
   5967     For questions related to the use of GCC, please consult these web
   5968     pages and the [98]GCC manuals. If that fails, the
   5969     [99]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   5970     web pages and the development of GCC are welcome on our developer
   5971     list at [100]gcc (a] gcc.gnu.org. All of [101]our lists have public
   5972     archives.
   5973 
   5974    Copyright (C) [102]Free Software Foundation, Inc. Verbatim copying and
   5975    distribution of this entire article is permitted in any medium,
   5976    provided this notice is preserved.
   5977 
   5978    These pages are [103]maintained by the GCC team. Last modified
   5979    2025-01-31.
   5980 
   5981 References
   5982 
   5983    1. https://gcc.gnu.org/gcc-9/porting_to.html
   5984    2. https://gcc.gnu.org/onlinedocs/index.html#current
   5985    3. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88469
   5986    4. https://gcc.gnu.org/ml/gcc/2018-10/msg00139.html
   5987    5. https://gcc.gnu.org/ml/gcc/2019-04/msg00023.html
   5988    6. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90920
   5989    7. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/C_002b_002b-Dialect-Options.html#index-frepo
   5990    8. https://gcc.gnu.org/PR90361
   5991    9. https://gcc.gnu.org/gcc-9/changes.html#general
   5992   10. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Invoking-GCC.html#Invoking-GCC
   5993   11. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-flive-patching
   5994   12. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fno-diagnostics-show-line-numbers
   5995   13. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fno-diagnostics-show-labels
   5996   14. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format
   5997   15. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-falign-functions
   5998   16. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-falign-labels
   5999   17. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-falign-loops
   6000   18. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-falign-jumps
   6001   19. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Instrumentation-Options.html#index-fprofile-filter-files
   6002   20. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Instrumentation-Options.html#index-fprofile-exclude-files
   6003   21. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Developer-Options.html#index-fopt-info
   6004   22. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Developer-Options.html#index-fsave-optimization-record
   6005   23. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-fipa-stack-alignment
   6006   24. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-fipa-reference-addressable
   6007   25. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Other-Builtins.html#index-_005f_005fbuiltin_005fexpect_005fwith_005fprobability
   6008   26. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Other-Builtins.html#index-_005f_005fbuiltin_005fhas_005fattribute-1
   6009   27. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Other-Builtins.html#index-_005f_005fbuiltin_005fspeculation_005fsafe_005fvalue-1
   6010   28. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Common-Function-Attributes.html#index-copy-function-attribute
   6011   29. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-ftree-switch-conversion
   6012   30. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-fprofile-use
   6013   31. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-fversion-loops-for-strides
   6014   32. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-floop-interchange
   6015   33. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-floop-unroll-and-jam
   6016   34. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-ftree-loop-distribution
   6017   35. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Invoking-Gcov.html#Invoking-Gcov
   6018   36. https://gcc.gnu.org/gcc-9/changes.html#languages
   6019   37. https://www.openacc.org/
   6020   38. https://gcc.gnu.org/wiki/OpenACC/Implementation%20Status#status-9
   6021   39. https://gcc.gnu.org/gcc-9/changes.html#c-family
   6022   40. https://www.openmp.org/specifications/
   6023   41. https://gcc.gnu.org/ml/gcc-patches/2018-11/msg00628.html
   6024   42. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Vector-Extensions.html#index-_005f_005fbuiltin_005fconvertvector
   6025   43. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Waddress-of-packed-member
   6026   44. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Warray-bounds
   6027   45. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Wattribute-alias
   6028   46. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Wformat-overflow
   6029   47. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Wformat-truncation
   6030   48. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Wmissing-attributes
   6031   49. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Wstringop-truncation
   6032   50. https://gcc.gnu.org/gcc-9/changes.html#c
   6033   51. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Wabsolute-value
   6034   52. https://gcc.gnu.org/gcc-9/changes.html#cxx
   6035   53. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wdeprecated-copy
   6036   54. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Winit-list-lifetime
   6037   55. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wredundant-move
   6038   56. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wpessimizing-move
   6039   57. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wclass-conversion
   6040   58. https://gcc.gnu.org/projects/cxx-status.html#cxx2a
   6041   59. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Wformat
   6042   60. https://gcc.gnu.org/gcc-9/changes.html#libstdcxx
   6043   61. https://github.com/uxlfoundation/oneTBB
   6044   62. https://gcc.gnu.org/gcc-9/changes.html#d
   6045   63. https://gcc.gnu.org/gcc-9/changes.html#fortran
   6046   64. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gfortran/Fortran-Dialect-Options.html#index-fdec-include
   6047   65. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gfortran/Fortran-Dialect-Options.html#index-fdec
   6048   66. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gfortran/BUILTIN-directive.html#BUILTIN-directive
   6049   67. https://gcc.gnu.org/gcc-9/changes.html#go
   6050   68. https://gcc.gnu.org/gcc-9/changes.html#jit
   6051   69. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/jit/topics/contexts.html#gcc_jit_context_add_driver_option
   6052   70. https://gcc.gnu.org/gcc-9/changes.html#targets
   6053   71. https://gcc.gnu.org/gcc-9/changes.html#arm-targets
   6054   72. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Instrumentation-Options.html#index-fstack-protector
   6055   73. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/AArch64-Options.html#AArch64-Options
   6056   74. https://gcc.gnu.org/gcc-9/changes.html#amdgcn
   6057   75. https://gcc.gnu.org/gcc-9/changes.html#arc
   6058   76. https://gcc.gnu.org/gcc-9/changes.html#csky
   6059   77. https://gcc.gnu.org/gcc-9/changes.html#x86
   6060   78. https://gcc.gnu.org/gcc-9/changes.html#mips
   6061   79. https://gcc.gnu.org/gcc-9/changes.html#or1k
   6062   80. https://gcc.gnu.org/gcc-9/changes.html#s390
   6063   81. https://gcc.gnu.org/gcc-9/changes.html#os
   6064   82. https://gcc.gnu.org/gcc-9/changes.html#solaris
   6065   83. https://gcc.gnu.org/gcc-9/changes.html#windows
   6066   84. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87137
   6067   85. https://gcc.gnu.org/gcc-9/changes.html#plugins
   6068   86. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format
   6069   87. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gccint/User-Experience-Guidelines.html
   6070   88. https://gcc.gnu.org/gcc-9/changes.html#GCC9.1
   6071   89. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=9.0
   6072   90. https://gcc.gnu.org/gcc-9/changes.html#GCC9.2
   6073   91. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=9.2
   6074   92. https://gcc.gnu.org/gcc-9/changes.html#GCC9.3
   6075   93. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=9.3
   6076   94. https://gcc.gnu.org/gcc-9/changes.html#GCC9.4
   6077   95. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=9.4
   6078   96. https://gcc.gnu.org/gcc-9/changes.html#GCC9.5
   6079   97. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=9.5
   6080   98. https://gcc.gnu.org/onlinedocs/
   6081   99. mailto:gcc-help (a] gcc.gnu.org
   6082  100. mailto:gcc (a] gcc.gnu.org
   6083  101. https://gcc.gnu.org/lists.html
   6084  102. https://www.fsf.org/
   6085  103. https://gcc.gnu.org/about.html
   6086 ======================================================================
   6087 http://gcc.gnu.org/gcc-8/index.html
   6088 
   6089                               GCC 8 Release Series
   6090 
   6091    (This release series is no longer supported.)
   6092 
   6093    May 14, 2021
   6094 
   6095    The [1]GNU project and the GCC developers are pleased to announce the
   6096    release of GCC 8.5.
   6097 
   6098    This release is a bug-fix release, containing fixes for regressions in
   6099    GCC 8.4 relative to previous releases of GCC.
   6100 
   6101 Release History
   6102 
   6103    GCC 8.5
   6104           May 14, 2021 ([2]changes, [3]documentation)
   6105 
   6106    GCC 8.4
   6107           Mar 4, 2020 ([4]changes, [5]documentation)
   6108 
   6109    GCC 8.3
   6110           Feb 22, 2019 ([6]changes, [7]documentation)
   6111 
   6112    GCC 8.2
   6113           Jul 26, 2018 ([8]changes, [9]documentation)
   6114 
   6115    GCC 8.1
   6116           May 2, 2018 ([10]changes, [11]documentation)
   6117 
   6118 References and Acknowledgements
   6119 
   6120    GCC used to stand for the GNU C Compiler, but since the compiler
   6121    supports several other languages aside from C, it now stands for the
   6122    GNU Compiler Collection.
   6123 
   6124    A list of [12]successful builds is updated as new information becomes
   6125    available.
   6126 
   6127    The GCC developers would like to thank the numerous people that have
   6128    contributed new features, improvements, bug fixes, and other changes as
   6129    well as test results to GCC. This [13]amazing group of volunteers is
   6130    what makes GCC successful.
   6131 
   6132    For additional information about GCC please refer to the [14]GCC
   6133    project web site or contact the [15]GCC development mailing list.
   6134 
   6135    To obtain GCC please use [16]our mirror sites or [17]our version
   6136    control system.
   6137 
   6138 
   6139     For questions related to the use of GCC, please consult these web
   6140     pages and the [18]GCC manuals. If that fails, the
   6141     [19]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   6142     web pages and the development of GCC are welcome on our developer
   6143     list at [20]gcc (a] gcc.gnu.org. All of [21]our lists have public
   6144     archives.
   6145 
   6146    Copyright (C) [22]Free Software Foundation, Inc. Verbatim copying and
   6147    distribution of this entire article is permitted in any medium,
   6148    provided this notice is preserved.
   6149 
   6150    These pages are [23]maintained by the GCC team. Last modified
   6151    2024-05-30.
   6152 
   6153 References
   6154 
   6155    1. http://www.gnu.org/
   6156    2. https://gcc.gnu.org/gcc-8/changes.html
   6157    3. https://gcc.gnu.org/onlinedocs/8.5.0/
   6158    4. https://gcc.gnu.org/gcc-8/changes.html
   6159    5. https://gcc.gnu.org/onlinedocs/8.4.0/
   6160    6. https://gcc.gnu.org/gcc-8/changes.html
   6161    7. https://gcc.gnu.org/onlinedocs/8.3.0/
   6162    8. https://gcc.gnu.org/gcc-8/changes.html
   6163    9. https://gcc.gnu.org/onlinedocs/8.2.0/
   6164   10. https://gcc.gnu.org/gcc-8/changes.html
   6165   11. https://gcc.gnu.org/onlinedocs/8.1.0/
   6166   12. https://gcc.gnu.org/gcc-8/buildstat.html
   6167   13. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Contributors.html
   6168   14. https://gcc.gnu.org/index.html
   6169   15. mailto:gcc (a] gcc.gnu.org
   6170   16. https://gcc.gnu.org/mirrors.html
   6171   17. https://gcc.gnu.org/git.html
   6172   18. https://gcc.gnu.org/onlinedocs/
   6173   19. mailto:gcc-help (a] gcc.gnu.org
   6174   20. mailto:gcc (a] gcc.gnu.org
   6175   21. https://gcc.gnu.org/lists.html
   6176   22. https://www.fsf.org/
   6177   23. https://gcc.gnu.org/about.html
   6178 ======================================================================
   6179 http://gcc.gnu.org/gcc-8/changes.html
   6180 
   6181                               GCC 8 Release Series
   6182                         Changes, New Features, and Fixes
   6183 
   6184    This page is a "brief" summary of some of the huge number of
   6185    improvements in GCC 8. You may also want to check out our [1]Porting to
   6186    GCC 8 page and the [2]full GCC documentation.
   6187 
   6188 Caveats
   6189 
   6190      * The default mode for C is now -std=gnu17 instead of -std=gnu11.
   6191      * Support for the obsolete SDB/coff debug info format has been
   6192        removed. The option -gcoff no longer does anything.
   6193      * The Cilk+ extensions to the C and C++ languages have been removed.
   6194      * The MPX extensions to the C and C++ languages have been deprecated
   6195        and will be removed in a future release.
   6196      * The extension allowing arithmetic on std::atomic<void*> and types
   6197        like std::atomic<R(*)()> has been deprecated.
   6198      * The non-standard C++0x std::copy_exception function was removed.
   6199        std::make_exception_ptr should be used instead.
   6200      * Support for the powerpc*-*-*spe* target ports which have been
   6201        recently unmaintained and untested in GCC has been declared
   6202        obsolete in GCC 8 as [3]announced. Unless there is activity to
   6203        revive them, the next release of GCC will have their sources
   6204        permanently removed.
   6205 
   6206 [4]General Improvements
   6207 
   6208      * Inter-procedural optimization improvements:
   6209           + Reworked run-time estimation metrics leading to more realistic
   6210             guesses driving inliner and cloning heuristics.
   6211           + The ipa-pure-const pass is extended to propagate the malloc
   6212             attribute, and the corresponding warning option
   6213             -Wsuggest-attribute=malloc emits a diagnostic for functions
   6214             which can be annotated with the malloc attribute.
   6215      * Profile driven optimization improvements:
   6216           + New infrastructure for representing profiles (both statically
   6217             guessed and profile feedback) which allows propagation of
   6218             additional information about the reliability of the profile.
   6219           + A number of improvements in the profile updating code solving
   6220             problems found by new verification code.
   6221           + Static detection of code which is not executed in a valid run
   6222             of the program. This includes paths which trigger undefined
   6223             behavior as well as calls to functions declared with the cold
   6224             attribute. Newly the noreturn attribute does not imply all
   6225             effects of cold to differentiate between exit (which is
   6226             noreturn) and abort (which is in addition not executed in
   6227             valid runs).
   6228           + -freorder-blocks-and-partition, a pass splitting function
   6229             bodies into hot and cold regions, is now enabled by default at
   6230             -O2 and higher for x86 and x86-64.
   6231      * Link-time optimization improvements:
   6232           + We have significantly improved debug information on ELF
   6233             targets using DWARF by properly preserving language-specific
   6234             information. This allows for example the libstdc++
   6235             pretty-printers to work with LTO optimized executables.
   6236      * A new option -fcf-protection=[full|branch|return|none] is
   6237        introduced to perform code instrumentation to increase program
   6238        security by checking that target addresses of control-flow transfer
   6239        instructions (such as indirect function call, function return,
   6240        indirect jump) are valid. Currently the instrumentation is
   6241        supported on x86 GNU/Linux targets only. See the user guide for
   6242        further information about the option syntax and section "New
   6243        Targets and Target Specific Improvements" for IA-32/x86-64 for more
   6244        details.
   6245      * The -gcolumn-info option is now enabled by default. It includes
   6246        column information in addition to just filenames and line numbers
   6247        in DWARF debugging information.
   6248      * The polyhedral-based loop nest optimization pass
   6249        -floop-nest-optimize has been overhauled. It's still considered
   6250        experimental and may not result in any runtime improvements.
   6251      * Two new classical loop nest optimization passes have been added.
   6252        -floop-unroll-and-jam performs outer loop unrolling and fusing of
   6253        the inner loop copies. -floop-interchange exchanges loops in a loop
   6254        nest to improve data locality. Both passes are enabled by default
   6255        at -O3 and above.
   6256      * The classic loop nest optimization pass -ftree-loop-distribution
   6257        has been improved and enabled by default at -O3 and above. It
   6258        supports loop nest distribution in some restricted scenarios; it
   6259        also supports cancellable innermost loop distribution with loop
   6260        versioning under run-time alias checks.
   6261      * The new option -fstack-clash-protection causes the compiler to
   6262        insert probes whenever stack space is allocated statically or
   6263        dynamically to reliably detect stack overflows and thus mitigate
   6264        the attack vector that relies on jumping over a stack guard page as
   6265        provided by the operating system.
   6266      * A new pragma GCC unroll has been implemented in the C family of
   6267        languages, as well as Fortran and Ada, so as to make it possible
   6268        for the user to have a finer-grained control over the loop
   6269        unrolling optimization.
   6270      * GCC has been enhanced to detect more instances of meaningless or
   6271        mutually exclusive attribute specifications and handle such
   6272        conflicts more consistently. Mutually exclusive attribute
   6273        specifications are ignored with a warning regardless of whether
   6274        they appear on the same declaration or on distinct declarations of
   6275        the same entity. For example, because the noreturn attribute on the
   6276        second declaration below is mutually exclusive with the malloc
   6277        attribute on the first, it is ignored and a warning is issued.
   6278 >
   6279       void* __attribute__ ((malloc)) f (unsigned);
   6280       void* __attribute__ ((noreturn)) f (unsigned);
   6281 
   6282       warning: ignoring attribute 'noreturn' because it conflicts with attribute
   6283  'malloc' [-Wattributes]
   6284      * The gcov tool can distinguish functions that begin on a same line
   6285        in a source file. This can be a different template instantiation or
   6286        a class constructor:
   6287 
   6288 File 'ins.C'
   6289 Lines executed:100.00% of 8
   6290 Creating 'ins.C.gcov'
   6291 
   6292         -:    0:Source:ins.C
   6293         -:    0:Graph:ins.gcno
   6294         -:    0:Data:ins.gcda
   6295         -:    0:Runs:1
   6296         -:    0:Programs:1
   6297         -:    1:template<class T>
   6298         -:    2:class Foo
   6299         -:    3:{
   6300         -:    4: public:
   6301         2:    5:   Foo(): b (1000) {}
   6302 ------------------
   6303 Foo<char>::Foo():
   6304         1:    5:   Foo(): b (1000) {}
   6305 ------------------
   6306 Foo<int>::Foo():
   6307         1:    5:   Foo(): b (1000) {}
   6308 ------------------
   6309         2:    6:   void inc () { b++; }
   6310 ------------------
   6311 Foo<char>::inc():
   6312         1:    6:   void inc () { b++; }
   6313 ------------------
   6314 Foo<int>::inc():
   6315         1:    6:   void inc () { b++; }
   6316 ------------------
   6317         -:    7:
   6318         -:    8:  private:
   6319         -:    9:   int b;
   6320         -:   10:};
   6321         -:   11:
   6322         1:   12:int main(int argc, char **argv)
   6323         -:   13:{
   6324         1:   14:  Foo<int> a;
   6325         1:   15:  Foo<char> b;
   6326         -:   16:
   6327         1:   17:  a.inc ();
   6328         1:   18:  b.inc ();
   6329         1:   19:}
   6330 
   6331      * The gcov tool has more accurate numbers for execution of lines in a
   6332        source file.
   6333      * The gcov tool can use TERM colors to provide more readable output.
   6334      * AddressSanitizer gained a new pair of sanitization options,
   6335        -fsanitize=pointer-compare and -fsanitize=pointer-subtract, which
   6336        warn about subtraction (or comparison) of pointers that point to a
   6337        different memory object:
   6338 
   6339 int
   6340 main ()
   6341 {
   6342   /* Heap allocated memory.  */
   6343   char *heap1 = (char *)__builtin_malloc (42);
   6344   char *heap2 = (char *)__builtin_malloc (42);
   6345   if (heap1 > heap2)
   6346       return 1;
   6347 
   6348   return 0;
   6349 }
   6350 
   6351 ==17465==ERROR: AddressSanitizer: invalid-pointer-pair: 0x604000000010 0x6040000
   6352 00050
   6353     #0 0x40070f in main /tmp/pointer-compare.c:7
   6354     #1 0x7ffff6a72a86 in __libc_start_main (/lib64/libc.so.6+0x21a86)
   6355     #2 0x400629 in _start (/tmp/a.out+0x400629)
   6356 
   6357 0x604000000010 is located 0 bytes inside of 42-byte region [0x604000000010,0x604
   6358 00000003a)
   6359 allocated by thread T0 here:
   6360     #0 0x7ffff6efb390 in __interceptor_malloc ../../../../libsanitizer/asan/asan
   6361 _malloc_linux.cc:86
   6362     #1 0x4006ea in main /tmp/pointer-compare.c:5
   6363     #2 0x7ffff6a72a86 in __libc_start_main (/lib64/libc.so.6+0x21a86)
   6364 
   6365 0x604000000050 is located 0 bytes inside of 42-byte region [0x604000000050,0x604
   6366 00000007a)
   6367 allocated by thread T0 here:
   6368     #0 0x7ffff6efb390 in __interceptor_malloc ../../../../libsanitizer/asan/asan
   6369 _malloc_linux.cc:86
   6370     #1 0x4006f8 in main /tmp/pointer-compare.c:6
   6371     #2 0x7ffff6a72a86 in __libc_start_main (/lib64/libc.so.6+0x21a86)
   6372 
   6373 SUMMARY: AddressSanitizer: invalid-pointer-pair /tmp/pointer-compare.c:7 in main
   6374 
   6375      * The store merging pass has been enhanced to handle bit-fields and
   6376        not just constant stores, but also data copying from adjacent
   6377        memory locations into other adjacent memory locations, including
   6378        bitwise logical operations on the data. The pass can also handle
   6379        byte swapping into memory locations.
   6380      * The undefined behavior sanitizer gained two new options included in
   6381        -fsanitize=undefined: -fsanitize=builtin which diagnoses at run
   6382        time invalid arguments to __builtin_clz or __builtin_ctz prefixed
   6383        builtins, and -fsanitize=pointer-overflow which performs cheap run
   6384        time tests for pointer wrapping.
   6385      * A new attribute no_sanitize can be applied to functions to instruct
   6386        the compiler not to do sanitization of the options provided as
   6387        arguments to the attribute. Acceptable values for no_sanitize match
   6388        those acceptable by the -fsanitize command-line option.
   6389 
   6390 void __attribute__ ((no_sanitize ("alignment", "object-size")))
   6391 f () { /* Do something. */; }
   6392 
   6393 [5]New Languages and Language specific improvements
   6394 
   6395   [6]Ada
   6396 
   6397      * For its internal exception handling used on the host for error
   6398        recovery in the front-end, the compiler now relies on the native
   6399        exception handling mechanism of the host platform, which should be
   6400        more efficient than the former mechanism.
   6401 
   6402   [7]BRIG (HSAIL)
   6403 
   6404    In this release cycle, the focus for the BRIGFE was on stabilization
   6405    and performance improvements. Also a couple of completely new features
   6406    were added.
   6407      * Improved support for function and module scope group segment
   6408        variables. PRM specs define function and module scope group segment
   6409        variables as an experimental feature. However, PRM test suite uses
   6410        them. Now group segment is handled by separate book keeping of
   6411        module scope and function (kernel) offsets. Each function has a
   6412        "frame" in the group segment offset to which is given as an
   6413        argument, similar to traditional call stack frame handling.
   6414      * Reduce the number of type conversions due to the untyped HSAIL
   6415        registers. Instead of always representing the HSAIL's untyped
   6416        registers as unsigned int, the gccbrig now pre-analyzes the BRIG
   6417        code and builds the register variables as a type used the most when
   6418        storing or reading data to/from each register. This reduces the
   6419        number of total casts which cannot be always optimized away.
   6420      * Support for BRIG_KIND_NONE directives.
   6421      * Made -O3 the default optimization level for BRIGFE.
   6422      * Fixed illegal addresses generated from address expressions which
   6423        refer only to offset 0.
   6424      * Fixed a bug with reg+offset addressing on 32b segments. In 'large'
   6425        mode, the offset is treated as 32-bit unless it's in global,
   6426        read-only or kernarg address space.
   6427      * Fixed a crash caused sometimes by calls with more than 4 arguments.
   6428      * Fixed a mis-execution issue with kernels that have both unexpanded
   6429        ID functions and calls to subfunctions.
   6430      * Treat HSAIL barrier builtins as setjmp/longjump style functions to
   6431        avoid illegal optimizations.
   6432      * Ensure per WI copies of private variables are aligned correctly.
   6433      * libhsail-rt: Assume the host runtime allocates the work group
   6434        memory.
   6435 
   6436   [8]C family
   6437 
   6438      * New command-line options have been added for the C and C++
   6439        compilers:
   6440           + [9]-Wmultistatement-macros warns about unsafe macros expanding
   6441             to multiple statements used as a body of a statement such as
   6442             if, else, while, switch, or for.
   6443           + [10]-Wstringop-truncation warns for calls to bounded string
   6444             manipulation functions such as strncat, strncpy, and stpncpy
   6445             that might either truncate the copied string or leave the
   6446             destination unchanged. For example, the following call to
   6447             strncat is diagnosed because it appends just three of the four
   6448             characters from the source string.
   6449 void append (char *buf, size_t bufsize)
   6450 {
   6451     strncat (buf, ".txt", 3);
   6452 }
   6453 warning: 'strncat' output truncated copying 3 bytes from a string of length 4 [-
   6454 Wstringop-truncation]
   6455             Similarly, in the following example, the call to strncpy
   6456             specifies the size of the destination buffer as the bound. If
   6457             the length of the source string is equal to or greater than
   6458             this size the result of the copy will not be NUL-terminated.
   6459             Therefore, the call is also diagnosed. To avoid the warning,
   6460             specify sizeof buf - 1 as the bound and set the last element
   6461             of the buffer to NUL.
   6462 void copy (const char *s)
   6463 {
   6464     char buf[80];
   6465     strncpy (buf, s, sizeof buf);
   6466     ...
   6467 }
   6468 warning: 'strncpy' specified bound 80 equals destination size [-Wstringop-trunca
   6469 tion]
   6470             The -Wstringop-truncation option is included in -Wall.
   6471             Note that due to GCC bug [11]82944, defining strncat, strncpy,
   6472             or stpncpy as a macro in a system header as some
   6473             implementations do, suppresses the warning.
   6474           + [12]-Wif-not-aligned controls warnings issued in response to
   6475             invalid uses of objects declared with attribute
   6476             [13]warn_if_not_aligned.
   6477             The -Wif-not-aligned option is included in -Wall.
   6478           + [14]-Wmissing-attributes warns when a declaration of a
   6479             function is missing one or more attributes that a related
   6480             function is declared with and whose absence may adversely
   6481             affect the correctness or efficiency of generated code. For
   6482             example, in C++, the warning is issued when an explicit
   6483             specialization of a primary template declared with attribute
   6484             alloc_align, alloc_size, assume_aligned, format, format_arg,
   6485             malloc, or nonnull is declared without it. Attributes
   6486             deprecated, error, and warning suppress the warning.
   6487             The -Wmissing-attributes option is included in -Wall.
   6488           + [15]-Wpacked-not-aligned warns when a struct or union declared
   6489             with attribute packed defines a member with an explicitly
   6490             specified alignment greater than 1. Such a member will wind up
   6491             under-aligned. For example, a warning will be issued for the
   6492             definition of struct A in the following:
   6493 struct __attribute__ ((aligned (8)))
   6494 S8 { char a[8]; };
   6495 
   6496 struct __attribute__ ((packed)) A
   6497 {
   6498     struct S8 s8;
   6499 };
   6500 warning: alignment 1 of 'struct S' is less than 8 [-Wpacked-not-aligned]
   6501             The -Wpacked-not-aligned option is included in -Wall.
   6502           + -Wcast-function-type warns when a function pointer is cast to
   6503             an incompatible function pointer. This warning is enabled by
   6504             -Wextra.
   6505           + -Wsizeof-pointer-div warns for suspicious divisions of the
   6506             size of a pointer by the size of the elements it points to,
   6507             which looks like the usual way to compute the array size but
   6508             won't work out correctly with pointers. This warning is
   6509             enabled by -Wall.
   6510           + -Wcast-align=strict warns whenever a pointer is cast such that
   6511             the required alignment of the target is increased. For
   6512             example, warn if a char * is cast to an int * regardless of
   6513             the target machine.
   6514           + -fprofile-abs-path creates absolute path names in the .gcno
   6515             files. This allows gcov to find the correct sources in
   6516             projects where compilations occur with different working
   6517             directories.
   6518      * -fno-strict-overflow is now mapped to -fwrapv -fwrapv-pointer and
   6519        signed integer overflow is now undefined by default at all
   6520        optimization levels. Using -fsanitize=signed-integer-overflow is
   6521        now the preferred way to audit code, -Wstrict-overflow is
   6522        deprecated.
   6523      * The [16]-Warray-bounds option has been improved to detect more
   6524        instances of out-of-bounds array indices and pointer offsets. For
   6525        example, negative or excessive indices into flexible array members
   6526        and string literals are detected.
   6527      * The [17]-Wrestrict option introduced in GCC 7 has been enhanced to
   6528        detect many more instances of overlapping accesses to objects via
   6529        restrict-qualified arguments to standard memory and string
   6530        manipulation functions such as memcpy and strcpy. For example, the
   6531        strcpy call in the function below attempts to truncate the string
   6532        by replacing its initial characters with the last four. However,
   6533        because the function writes the terminating NUL into a[4], the
   6534        copies overlap and the call is diagnosed.
   6535 void f (void)
   6536 {
   6537     char a[] = "abcd1234";
   6538     strcpy (a, a + 4);
   6539     ...
   6540 }
   6541 warning: 'strcpy' accessing 5 bytes at offsets 0 and 4 overlaps 1 byte at offset
   6542  4 [-Wrestrict]
   6543        The -Wrestrict option is included in -Wall.
   6544      * Several optimizer enhancements have enabled improvements to the
   6545        [18]-Wformat-overflow and [19]-Wformat-truncation options. The
   6546        warnings detect more instances of buffer overflow and truncation
   6547        than in GCC 7 and are better at avoiding certain kinds of false
   6548        positives.
   6549      * When reporting mismatching argument types at a function call, the C
   6550        and C++ compilers now underline both the argument and the pertinent
   6551        parameter in the declaration.
   6552 $ gcc arg-type-mismatch.cc
   6553 arg-type-mismatch.cc: In function 'int caller(int, int, float)':
   6554 arg-type-mismatch.cc:5:24: error: invalid conversion from 'int' to 'const char*'
   6555  [-fpermissive]
   6556    return callee(first, second, third);
   6557                         ^~~~~~
   6558 arg-type-mismatch.cc:1:40: note:   initializing argument 2 of 'int callee(int, c
   6559 onst char*, float)'
   6560  extern int callee(int one, const char *two, float three);
   6561                             ~~~~~~~~~~~~^~~
   6562 
   6563      * When reporting on unrecognized identifiers, the C and C++ compilers
   6564        will now emit fix-it hints suggesting #include directives for
   6565        various headers in the C and C++ standard libraries.
   6566 $ gcc incomplete.c
   6567 incomplete.c: In function 'test':
   6568 incomplete.c:3:10: error: 'NULL' undeclared (first use in this function)
   6569    return NULL;
   6570           ^~~~
   6571 incomplete.c:3:10: note: 'NULL' is defined in header '<stddef.h>'; did you forge
   6572 t to '#include <stddef.h>'?
   6573 incomplete.c:1:1:
   6574 +#include <stddef.h>
   6575  const char *test(void)
   6576 incomplete.c:3:10:
   6577    return NULL;
   6578           ^~~~
   6579 incomplete.c:3:10: note: each undeclared identifier is reported only once for ea
   6580 ch function it appears in
   6581 
   6582 $ gcc incomplete.cc
   6583 incomplete.cc:1:6: error: 'string' in namespace 'std' does not name a type
   6584  std::string s("hello world");
   6585       ^~~~~~
   6586 incomplete.cc:1:1: note: 'std::string' is defined in header '<string>'; did you
   6587 forget to '#include <string>'?
   6588 +#include <string>
   6589  std::string s("hello world");
   6590  ^~~
   6591 
   6592      * The C and C++ compilers now use more intuitive locations when
   6593        reporting on missing semicolons, and offer fix-it hints:
   6594 $ gcc t.c
   6595 t.c: In function 'test':
   6596 t.c:3:12: error: expected ';' before '}' token
   6597    return 42
   6598             ^
   6599             ;
   6600  }
   6601  ~
   6602 
   6603      * When reporting on missing '}' and ')' tokens, the C and C++
   6604        compilers will now highlight the corresponding '{' and '(' token,
   6605        issuing a 'note' if it's on a separate line:
   6606 $ gcc unclosed.c
   6607 unclosed.c: In function 'log_when_out_of_range':
   6608 unclosed.c:12:50: error: expected ')' before '{' token
   6609        && (temperature < MIN || temperature > MAX) {
   6610                                                   ^~
   6611                                                   )
   6612 unclosed.c:11:6: note: to match this '('
   6613    if (logging_enabled && check_range ()
   6614       ^
   6615 
   6616        or highlighting it directly if it's on the same line:
   6617 $ gcc unclosed-2.c
   6618 unclosed-2.c: In function 'test':
   6619 unclosed-2.c:8:45: error: expected ')' before '{' token
   6620    if (temperature < MIN || temperature > MAX {
   6621       ~                                      ^~
   6622                                              )
   6623 
   6624        They will also emit fix-it hints.
   6625 
   6626   [20]C
   6627 
   6628      * New options -std=c17, to select support for the 2018 edition of the
   6629        ISO C standard (__STDC_VERSION__ == 201710L), and -std=gnu17, for
   6630        C17 with GNU extensions.
   6631      * The default mode has been changed to -std=gnu17.
   6632 
   6633   [21]C++
   6634 
   6635      * GCC 8 (-fabi-version=12) has a couple of corrections to the calling
   6636        convention, which changes the ABI for some uncommon code:
   6637           + Passing an empty class as an argument now takes up no space on
   6638             x86_64, as required by the psABI.
   6639           + Passing or returning a class with only deleted copy and move
   6640             constructors now uses the same calling convention as a class
   6641             with a non-trivial copy or move constructor. This only affects
   6642             C++17 mode, as in earlier standards passing or returning such
   6643             a class was impossible.
   6644           + WARNING: In GCC 8.1 the second change mistakenly also affects
   6645             classes with a deleted copy constructor and defaulted trivial
   6646             move constructor (bug [22]c++/86094). This issue is fixed in
   6647             GCC 8.2 (-fabi-version=13).
   6648        You can test whether these changes affect your code with -Wabi=11
   6649        (or -Wabi=12 in GCC 8.2 for the third issue); if these changes are
   6650        problematic for your project, the GCC 7 ABI can be selected with
   6651        -fabi-version=11.
   6652      * The value of the C++11 alignof operator has been corrected to match
   6653        C _Alignof (minimum alignment) rather than GNU __alignof__
   6654        (preferred alignment); on ia32 targets this means that
   6655        alignof(double) is now 4 rather than 8. Code that wants the
   6656        preferred alignment should use __alignof__ instead.
   6657      * New command-line options have been added for the C++ compiler to
   6658        control warnings:
   6659           + [23]-Wclass-memaccess warns when objects of non-trivial class
   6660             types are manipulated in potentially unsafe ways by raw memory
   6661             functions such as memcpy, or realloc. The warning helps detect
   6662             calls that bypass user-defined constructors or copy-assignment
   6663             operators, corrupt virtual table pointers, data members of
   6664             const-qualified types or references, or member pointers. The
   6665             warning also detects calls that would bypass access controls
   6666             to data members. For example, a call such as:
   6667         memcpy (&std::cout, &std::cerr, sizeof std::cout);
   6668             results in
   6669         warning: 'void* memcpy(void*, const void*, long unsigned int)' writing t
   6670 o an object of type 'std::ostream' {aka 'class std::basic_ostream<char>'} with n
   6671 o trivial copy-assignment [-Wclass-memaccess]
   6672             The -Wclass-memaccess option is included in -Wall.
   6673      * The C++ front end has experimental support for some of the upcoming
   6674        C++2a draft features with the -std=c++2a or -std=gnu++2a flags,
   6675        including designated initializers, default member initializers for
   6676        bit-fields, __VA_OPT__ (except that #__VA_OPT__ is unsupported),
   6677        lambda [=, this] captures, etc. For a full list of new features,
   6678        see [24]the C++ status page.
   6679      * When reporting on attempts to access private fields of a class or
   6680        struct, the C++ compiler will now offer fix-it hints showing how to
   6681        use an accessor function to get at the field in question, if one
   6682        exists.
   6683 $ gcc accessor.cc
   6684 accessor.cc: In function 'void test(foo*)':
   6685 accessor.cc:12:12: error: 'double foo::m_ratio' is private within this context
   6686    if (ptr->m_ratio >= 0.5)
   6687             ^~~~~~~
   6688 accessor.cc:7:10: note: declared private here
   6689    double m_ratio;
   6690           ^~~~~~~
   6691 accessor.cc:12:12: note: field 'double foo::m_ratio' can be accessed via 'double
   6692  foo::get_ratio() const'
   6693    if (ptr->m_ratio >= 0.5)
   6694             ^~~~~~~
   6695             get_ratio()
   6696 
   6697      * The C++ compiler can now give you a hint if you use a macro before
   6698        it was defined (e.g. if you mess up the order of your #include
   6699        directives):
   6700 $ gcc ordering.cc
   6701 ordering.cc:2:24: error: expected ';' at end of member declaration
   6702    virtual void clone() const OVERRIDE { }
   6703                         ^~~~~
   6704                              ;
   6705 ordering.cc:2:30: error: 'OVERRIDE' does not name a type
   6706    virtual void clone() const OVERRIDE { }
   6707                               ^~~~~~~~
   6708 ordering.cc:2:30: note: the macro 'OVERRIDE' had not yet been defined
   6709 In file included from ordering.cc:5:
   6710 c++11-compat.h:2: note: it was later defined here
   6711  #define OVERRIDE override
   6712 
   6713 
   6714      * The -Wold-style-cast diagnostic can now emit fix-it hints telling
   6715        you when you can use a static_cast, const_cast, or
   6716        reinterpret_cast.
   6717 $ gcc -c old-style-cast-fixits.cc -Wold-style-cast
   6718 old-style-cast-fixits.cc: In function 'void test(void*)':
   6719 old-style-cast-fixits.cc:5:19: warning: use of old-style cast to 'struct foo*' [
   6720 -Wold-style-cast]
   6721    foo *f = (foo *)ptr;
   6722                    ^~~
   6723             ----------
   6724             static_cast<foo *> (ptr)
   6725 
   6726      * When reporting on problems within extern "C" linkage
   6727        specifications, the C++ compiler will now display the location of
   6728        the start of the extern "C".
   6729 $ gcc -c extern-c.cc
   6730 extern-c.cc:3:1: error: template with C linkage
   6731  template <typename T> void test (void);
   6732  ^~~~~~~~
   6733 In file included from extern-c.cc:1:
   6734 unclosed.h:1:1: note: 'extern "C"' linkage started here
   6735  extern "C" {
   6736  ^~~~~~~~~~
   6737 extern-c.cc:3:39: error: expected '}' at end of input
   6738  template <typename T> void test (void);
   6739                                        ^
   6740 In file included from extern-c.cc:1:
   6741 unclosed.h:1:12: note: to match this '{'
   6742  extern "C" {
   6743             ^
   6744 
   6745      * When reporting on mismatching template types, the C++ compiler will
   6746        now use color to highlight the mismatching parts of the template,
   6747        and will elide the parameters that are common between two
   6748        mismatching templates, printing [...] instead:
   6749 $ gcc templates.cc
   6750 templates.cc: In function 'void test()':
   6751 templates.cc:9:8: error: could not convert 'vector<double>()' from 'vector<doubl
   6752 e>' to 'vector<int>'
   6753    fn_1(vector<double> ());
   6754         ^~~~~~~~~~~~~~~~~
   6755 templates.cc:10:8: error: could not convert 'map<int, double>()' from 'map<[...]
   6756 ,double>' to 'map<[...],int>'
   6757    fn_2(map<int, double>());
   6758         ^~~~~~~~~~~~~~~~~~
   6759 
   6760        Those [...] elided parameters can be seen using -fno-elide-type:
   6761 $ gcc templates.cc -fno-elide-type
   6762 templates.cc: In function 'void test()':
   6763 templates.cc:9:8: error: could not convert 'vector<double>()' from 'vector<doubl
   6764 e>' to 'vector<int>'
   6765    fn_1(vector<double> ());
   6766         ^~~~~~~~~~~~~~~~~
   6767 templates.cc:10:8: error: could not convert 'map<int, double>()' from 'map<int,d
   6768 ouble>' to 'map<int,int>'
   6769    fn_2(map<int, double>());
   6770         ^~~~~~~~~~~~~~~~~~
   6771 
   6772        The C++ compiler has also gained an option
   6773        -fdiagnostics-show-template-tree which visualizes such mismatching
   6774        templates in a hierarchical form:
   6775 $ gcc templates-2.cc -fdiagnostics-show-template-tree
   6776 templates-2.cc: In function 'void test()':
   6777 templates-2.cc:9:8: error: could not convert 'vector<double>()' from 'vector<dou
   6778 ble>' to 'vector<int>'
   6779   vector<
   6780     [double != int]>
   6781    fn_1(vector<double> ());
   6782         ^~~~~~~~~~~~~~~~~
   6783 templates-2.cc:10:8: error: could not convert 'map<map<int, vector<double> >, ve
   6784 ctor<double> >()' from 'map<map<[...],vector<double>>,vector<double>>' to 'map<m
   6785 ap<[...],vector<float>>,vector<float>>'
   6786   map<
   6787     map<
   6788       [...],
   6789       vector<
   6790         [double != float]>>,
   6791     vector<
   6792       [double != float]>>
   6793    fn_2(map<map<int, vector<double>>, vector<double>> ());
   6794         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   6795 
   6796        which again works with -fno-elide-type:
   6797 $ gcc templates-2.cc -fdiagnostics-show-template-tree -fno-elide-type
   6798 templates-2.cc: In function 'void test()':
   6799 templates-2.cc:9:8: error: could not convert 'vector<double>()' from 'vector<dou
   6800 ble>' to 'vector<int>'
   6801   vector<
   6802     [double != int]>
   6803    fn_1(vector<double> ());
   6804         ^~~~~~~~~~~~~~~~~
   6805 templates-2.cc:10:8: error: could not convert 'map<map<int, vector<double> >, ve
   6806 ctor<double> >()' from 'map<map<int,vector<double>>,vector<double>>' to 'map<map
   6807 <int,vector<float>>,vector<float>>'
   6808   map<
   6809     map<
   6810       int,
   6811       vector<
   6812         [double != float]>>,
   6813     vector<
   6814       [double != float]>>
   6815    fn_2(map<map<int, vector<double>>, vector<double>> ());
   6816         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   6817 
   6818      * Flowing off the end of a non-void function is considered
   6819        unreachable and may be subject to optimization on that basis. As a
   6820        result of this change, -Wreturn-type warnings are enabled by
   6821        default for C++.
   6822 
   6823     [25]Runtime Library (libstdc++)
   6824 
   6825      * Improved experimental support for C++17, including the following
   6826        features:
   6827           + Deduction guides to support class template argument deduction.
   6828           + std::filesystem implementation.
   6829           + std::char_traits<char> and std::char_traits<wchar_t> are
   6830             usable in constant expressions.
   6831           + std::to_chars and std::from_chars (for integers only, not for
   6832             floating point types).
   6833      * Experimental support for C++2a: std::to_address (thanks to Glen
   6834        Fernandes) and std::endian.
   6835      * On GNU/Linux, std::random_device::entropy() accesses the kernel's
   6836        entropy count for the random device, if known (thanks to Xi
   6837        Ruoyao).
   6838      * Support for std::experimental::source_location.
   6839      * AddressSanitizer integration for std::vector, detecting
   6840        out-of-range accesses to the unused capacity of a vector.
   6841      * Extensions __gnu_cxx::airy_ai and __gnu_cxx::airy_bi added to the
   6842        Mathematical Special Functions.
   6843 
   6844   [26]Fortran
   6845 
   6846      * The main version of libfortran has been changed to 5.
   6847      * Parameterized derived types, a major feature of Fortran 2003, have
   6848        been implemented.
   6849      * Partial support is provided for Fortran 2018 teams, which are
   6850        hierarchical subsets of images that execute independently of other
   6851        image subsets.
   6852      * The maximum rank for arrays has been increased to 15, conforming to
   6853        the Fortran 2008 standard.
   6854      * Transformational intrinsics are now fully supported in
   6855        initialization expressions.
   6856      * New flag -fc-prototypes to write C prototypes for BIND(C)
   6857        procedures and variables.
   6858      * If -fmax-stack-var-size is honored if given together with -Ofast,
   6859        -fstack-arrays is no longer set in that case.
   6860      * New options -fdefault-real-16 and -fdefault-real-10 to control the
   6861        default kind of REAL variables.
   6862      * A warning is now issued if an array subscript inside a DO loop
   6863        could lead to an out-of-bounds-access. The new option
   6864        -Wdo-subscript, enabled by -Wextra, warns about this even if the
   6865        compiler can not prove that the code will be executed.
   6866      * The Fortran front end now attempts to interchange loops if it is
   6867        deemed profitable. So far, this is restricted to FORALL and DO
   6868        CONCURRENT statements with multiple indices. This behavior be
   6869        controlled with the new flag -ffrontend-loop-interchange, which is
   6870        enabled with optimization by default. The
   6871        -Wfrontend-loop-interchange option warns about such occurrences.
   6872      * When an actual argument contains too few elements for a dummy
   6873        argument, an error is now issued. The -std=legacy option can be
   6874        used to still compile such code.
   6875      * The RECL= argument to OPEN and INQUIRE statements now allows 64-bit
   6876        integers, making records larger than 2GiB possible.
   6877      * The GFORTRAN_DEFAULT_RECL environment variable no longer has any
   6878        effect. The record length for preconnected units is now larger than
   6879        any practical limit, same as for sequential access units opened
   6880        without an explicit RECL= specifier.
   6881      * Character variables longer than HUGE(0) elements are now possible
   6882        on 64-bit targets. Note that this changes the procedure call ABI
   6883        for all procedures with character arguments on 64-bit targets, as
   6884        the type of the hidden character length argument has changed. The
   6885        hidden character length argument is now of type INTEGER(C_SIZE_T).
   6886      * Partial support is provided for Fortran 2018 teams, which are
   6887        hierarchical subsets of images that execute independently of other
   6888        image subsets.
   6889 
   6890   [27]Go
   6891 
   6892      * GCC 8 provides a complete implementation of the Go 1.10.1 user
   6893        packages.
   6894      * The garbage collector is now fully concurrent. As before, values
   6895        stored on the stack are scanned conservatively, but value stored in
   6896        the heap are scanned precisely.
   6897      * Escape analysis is fully implemented and enabled by default in the
   6898        Go front end. This significantly reduces the number of heap
   6899        allocations by allocating values on the stack instead.
   6900 
   6901 [28]libgccjit
   6902 
   6903    The libgccjit API gained four new entry points:
   6904      * [29]gcc_jit_type_get_vector and
   6905      * [30]gcc_jit_context_new_rvalue_from_vector for working with
   6906        vectors,
   6907      * [31]gcc_jit_type_get_aligned
   6908      * [32]gcc_jit_function_get_address
   6909 
   6910    The C code generated by [33]gcc_jit_context_dump_reproducer_to_file is
   6911    now easier-to-read.
   6912 
   6913 [34]New Targets and Target Specific Improvements
   6914 
   6915   [35]AArch64
   6916 
   6917      * The Armv8.4-A architecture is now supported. It can be used by
   6918        specifying the -march=armv8.4-a option.
   6919      * The Dot Product instructions are now supported as an optional
   6920        extension to the Armv8.2-A architecture and newer and are mandatory
   6921        on Armv8.4-A. The extension can be used by specifying the +dotprod
   6922        architecture extension. E.g. -march=armv8.2-a+dotprod.
   6923      * The Armv8-A +crypto extension has now been split into two
   6924        extensions for finer grained control:
   6925           + +aes which contains the Armv8-A AES crytographic instructions.
   6926           + +sha2 which contains the Armv8-A SHA2 and SHA1 cryptographic
   6927             instructions.
   6928        Using +crypto will now enable these two extensions.
   6929      * New Armv8.4-A FP16 Floating Point Multiplication Variant
   6930        instructions have been added. These instructions are mandatory in
   6931        Armv8.4-A but available as an optional extension to Armv8.2-A and
   6932        Armv8.3-A. The new extension can be used by specifying the +fp16fml
   6933        architectural extension on Armv8.2-A and Armv8.3-A. On Armv8.4-A
   6934        the instructions can be enabled by specifying +fp16.
   6935      * New cryptographic instructions have been added as optional
   6936        extensions to Armv8.2-A and newer. These instructions can be
   6937        enabled with:
   6938           + +sha3 New SHA3 and SHA2 instructions from Armv8.4-A. This
   6939             implies +sha2.
   6940           + +sm4 New SM3 and SM4 instructions from Armv8.4-A.
   6941      * The Scalable Vector Extension (SVE) is now supported as an optional
   6942        extension to the Armv8.2-A architecture and newer. This support
   6943        includes automatic vectorization with SVE instructions, but it does
   6944        not yet include the SVE Arm C Language Extensions (ACLE). It can be
   6945        enabled by specifying the +sve architecture extension (for example,
   6946        -march=armv8.2-a+sve). By default, the generated code works with
   6947        all vector lengths, but it can be made specific to N-bit vectors
   6948        using -msve-vector-bits=N.
   6949      * Support has been added for the following processors (GCC
   6950        identifiers in parentheses):
   6951           + Arm Cortex-A75 (cortex-a75).
   6952           + Arm Cortex-A55 (cortex-a55).
   6953           + Arm Cortex-A55/Cortex-A75 DynamIQ big.LITTLE
   6954             (cortex-a75.cortex-a55).
   6955        The GCC identifiers can be used as arguments to the -mcpu or -mtune
   6956        options, for example: -mcpu=cortex-a75 or -mtune=cortex-a75 or as
   6957        arguments to the equivalent target attributes and pragmas.
   6958 
   6959   [36]ARC
   6960 
   6961      * Added support for:
   6962           + Fast interrupts.
   6963           + Naked functions.
   6964           + aux variable attributes.
   6965           + uncached type qualifier.
   6966           + Secure functions via sjli instruction.
   6967      * New exception handling implementation.
   6968      * Revamped trampoline implementation.
   6969      * Refactored small data feature implementation, controlled via the -G
   6970        command-line option.
   6971      * New support for reduced register set ARC architecture
   6972        configurations, controlled via the -mrf16 command-line option.
   6973      * Refurbished and improved support for zero overhead loops.
   6974        Introduced -mlpc-width command-line option to control the width of
   6975        the lp_count register.
   6976 
   6977   [37]ARM
   6978 
   6979      * The -mfpu option now takes a new option setting of -mfpu=auto. When
   6980        set to this the floating-point and SIMD settings are derived from
   6981        the settings of the -mcpu or -march options. The internal CPU
   6982        configurations have been updated with information about the
   6983        permitted floating-point configurations supported. See the user
   6984        guide for further information about the extended option syntax for
   6985        controlling architectural extensions via the -march option.
   6986        -mfpu=auto is now the default setting unless the compiler has been
   6987        configured with an explicit --with-fpu option.
   6988      * The -march and -mcpu options now accept optional extensions to the
   6989        architecture or CPU option, allowing the user to enable or disable
   6990        any such extensions supported by that architecture or CPU such as
   6991        (but not limited to) floating-point and AdvancedSIMD. For example:
   6992        the option -mcpu=cortex-a53+nofp will generate code for the
   6993        Cortex-A53 processor with no floating-point support. This, in
   6994        combination with the new -mfpu=auto option, provides a
   6995        straightforward way of specifying a valid build target through a
   6996        single -mcpu or -march option. The -mtune option accepts the same
   6997        arguments as -mcpu but only the CPU name has an effect on tuning.
   6998        The architecture extensions do not have any effect. For details of
   6999        what extensions a particular architecture or CPU option supports
   7000        please refer to the [38]documentation.
   7001      * The -mstructure-size-boundary option has been deprecated and will
   7002        be removed in a future release.
   7003      * The default link behavior for Armv6 and Armv7-R targets has been
   7004        changed to produce BE8 format when generating big-endian images. A
   7005        new flag -mbe32 can be used to force the linker to produce legacy
   7006        BE32 format images. There is no change of behavior for Armv6-M and
   7007        other Armv7 or later targets: these already defaulted to BE8
   7008        format. This change brings GCC into alignment with other compilers
   7009        for the ARM architecture.
   7010      * The Armv8-R architecture is now supported. It can be used by
   7011        specifying the -march=armv8-r option.
   7012      * The Armv8.3-A architecture is now supported. It can be used by
   7013        specifying the -march=armv8.3-a option.
   7014      * The Armv8.4-A architecture is now supported. It can be used by
   7015        specifying the -march=armv8.4-a option.
   7016      * The Dot Product instructions are now supported as an optional
   7017        extension to the Armv8.2-A architecture and newer and are mandatory
   7018        on Armv8.4-A. The extension can be used by specifying the +dotprod
   7019        architecture extension. E.g. -march=armv8.2-a+dotprod.
   7020      * Support for setting extensions and architectures using the GCC
   7021        target pragma and attribute has been added. It can be used by
   7022        specifying #pragma GCC target ("arch=..."), #pragma GCC target
   7023        ("+extension"), __attribute__((target("arch=..."))) or
   7024        __attribute__((target("+extension"))).
   7025      * New Armv8.4-A FP16 Floating Point Multiplication Variant
   7026        instructions have been added. These instructions are mandatory in
   7027        Armv8.4-A but available as an optional extension to Armv8.2-A and
   7028        Armv8.3-A. The new extension can be used by specifying the +fp16fml
   7029        architectural extension on Armv8.2-A and Armv8.3-A. On Armv8.4-A
   7030        the instructions can be enabled by specifying +fp16.
   7031      * Support has been added for the following processors (GCC
   7032        identifiers in parentheses):
   7033           + Arm Cortex-A75 (cortex-a75).
   7034           + Arm Cortex-A55 (cortex-a55).
   7035           + Arm Cortex-A55/Cortex-A75 DynamIQ big.LITTLE
   7036             (cortex-a75.cortex-a55).
   7037           + Arm Cortex-R52 for Armv8-R (cortex-r52).
   7038        The GCC identifiers can be used as arguments to the -mcpu or -mtune
   7039        options, for example: -mcpu=cortex-a75 or -mtune=cortex-r52 or as
   7040        arguments to the equivalent target attributes and pragmas.
   7041 
   7042   [39]AVR
   7043 
   7044      * The AVR port now supports the following XMEGA-like devices:
   7045 
   7046      ATtiny212, ATtiny214, ATtiny412, ATtiny414, ATtiny416, ATtiny417,
   7047      ATtiny814, ATtiny816, ATtiny817, ATtiny1614, ATtiny1616, ATtiny1617,
   7048      ATtiny3214, ATtiny3216, ATtiny3217
   7049        The new devices are listed under [40]-mmcu=avrxmega3.
   7050           + These devices see flash memory in the RAM address space, so
   7051             that features like PROGMEM and __flash are not needed any more
   7052             (as opposed to other AVR families for which read-only data
   7053             will be located in RAM except special, non-standard features
   7054             are used to locate and access such data). This requires that
   7055             the compiler is used with Binutils 2.29 or newer so that
   7056             [41]read-only data will be located in flash memory.
   7057           + A new command-line option -mshort-calls is supported. This
   7058             option is used internally for multilib selection of the
   7059             avrxmega3 variants. It is not an optimization option. Do not
   7060             set it by hand.
   7061      * The compiler now generates [42]efficient interrupt service routine
   7062        (ISR) prologues and epilogues. This is achieved by using the new
   7063        [43]AVR pseudo instruction __gcc_isr which is supported and
   7064        resolved by the GNU assembler.
   7065           + As the __gcc_isr pseudo-instruction will be resolved by the
   7066             assembler, inline assembly is transparent to the process. This
   7067             means that when inline assembly uses an instruction like INC
   7068             that clobbers the condition code, then the assembler will
   7069             detect this and generate an appropriate ISR prologue /
   7070             epilogue chunk to save / restore SREG as needed.
   7071           + A new command-line option -mno-gas-isr-prologues disables the
   7072             generation of the __gcc_isr pseudo instruction. Any non-naked
   7073             ISR will save and restore SREG, tmp_reg and zero_reg, no
   7074             matter whether the respective register is clobbered or used.
   7075           + The feature is turned on per default for all optimization
   7076             levels except for -O0 and -Og. It is explicitly enabled by
   7077             means of option -mgas-isr-prologues.
   7078           + Support has been added for a new [44]AVR function attribute
   7079             no_gccisr. It can be used to disable __gcc_isr pseudo
   7080             instruction generation for individual ISRs.
   7081           + This optimization is only available if GCC is configured with
   7082             GNU Binutils 2.29 or newer; or at least with a version of
   7083             Binutils that implements feature [45]PR21683.
   7084      * The compiler no more saves / restores registers in main; the effect
   7085        is the same as if attribute OS_task was specified for main. This
   7086        optimization can be switched off by the new command-line option
   7087        -mno-main-is-OS_task.
   7088 
   7089   [46]IA-32/x86-64
   7090 
   7091      * The x86 port now supports the naked function attribute.
   7092      * Better tuning for znver1 and Intel Core based CPUs.
   7093      * Vectorization cost metrics has been reworked leading to significant
   7094        improvements on some benchmarks.
   7095      * GCC now supports the Intel CPU named Cannonlake through
   7096        -march=cannonlake. The switch enables the AVX512VBMI, AVX512IFMA
   7097        and SHA ISA extensions.
   7098      * GCC now supports the Intel CPU named Icelake through
   7099        -march=icelake. The switch enables the AVX512VNNI, GFNI, VAES,
   7100        AVX512VBMI2, VPCLMULQDQ, AVX512BITALG, RDPID and AVX512VPOPCNTDQ
   7101        ISA extensions.
   7102      * GCC now supports the Intel Control-flow Enforcement Technology
   7103        (CET) extension through -fcf-protection option.
   7104 
   7105   [47]NDS32
   7106 
   7107      * New command-line options -mext-perf, -mext-perf2, and -mext-string
   7108        have been added for performance extension instructions.
   7109 
   7110   [48]Nios II
   7111 
   7112      * The Nios II back end has been improved to generate better-optimized
   7113        code. Changes include switching to LRA, more accurate cost models,
   7114        and more compact code for addressing static variables.
   7115      * New command-line options -mgprel-sec= and -mr0rel-sec= have been
   7116        added.
   7117      * The stack-smashing protection options are now enabled on Nios II.
   7118 
   7119   [49]PA-RISC
   7120 
   7121      * The default call ABI on 32-bit linux has been changed from callee
   7122        copies to caller copies. This affects objects larger than eight
   7123        bytes passed by value. The goal is to improve compatibility with
   7124        x86 and resolve issues with OpenMP.
   7125      * Other PA-RISC targets are unchanged.
   7126 
   7127   [50]PowerPC / PowerPC64 / RS6000
   7128 
   7129      * The PowerPC SPE support is split off to a separate powerpcspe port.
   7130        The separate port is deprecated and might be removed in a future
   7131        release.
   7132      * The Paired Single support (as used on some PPC750 CPUs, -mpaired,
   7133        powerpc*-*-linux*paired*) is deprecated and will be removed in a
   7134        future release.
   7135      * The Xilinx floating point support (-mxilinx-fpu,
   7136        powerpc-xilinx-eabi*) is deprecated and will be removed in a future
   7137        release.
   7138      * Support for using big-endian AltiVec intrinsics on a little-endian
   7139        target (-maltivec=be) is deprecated and will be removed in a future
   7140        release.
   7141 
   7142   [51]Tile
   7143 
   7144      * The TILE-Gx port is deprecated and will be removed in a future
   7145        release.
   7146 
   7147 [52]Operating Systems
   7148 
   7149   [53]Windows
   7150 
   7151      * GCC on Microsoft Windows can now be configured via
   7152        --enable-mingw-wildcard or --disable-mingw-wildcard to force a
   7153        specific behavior for GCC itself with regards to supporting the
   7154        wildcard character. Prior versions of GCC would follow the
   7155        configuration of the MinGW runtime. This behavior can still be
   7156        obtained by not using the above options or by using
   7157        --enable-mingw-wildcard=platform.
   7158 
   7159 [54]Improvements for plugin authors
   7160 
   7161      * Plugins can now register a callback hook for when comments are
   7162        encountered by the C and C++ compilers, e.g. allowing for plugins
   7163        to handle documentation markup in code comments.
   7164      * The gdbinit support script for debugging GCC now has a
   7165        break-on-diagnostic command, providing an easy way to trigger a
   7166        breakpoint whenever a diagnostic is emitted.
   7167      * The API for creating fix-it hints now supports newlines, and for
   7168        emitting mutually incompatible fix-it hints for one diagnostic.
   7169 
   7170 [55]GCC 8.1
   7171 
   7172    This is the [56]list of problem reports (PRs) from GCC's bug tracking
   7173    system that are known to be fixed in the 8.1 release. This list might
   7174    not be complete (that is, it is possible that some PRs that have been
   7175    fixed are not listed here).
   7176 
   7177 [57]GCC 8.2
   7178 
   7179    This is the [58]list of problem reports (PRs) from GCC's bug tracking
   7180    system that are known to be fixed in the 8.2 release. This list might
   7181    not be complete (that is, it is possible that some PRs that have been
   7182    fixed are not listed here).
   7183 
   7184   General Improvements
   7185 
   7186      * Fixed LTO link-time performance problems caused by an overflow in
   7187        the partitioning algorithm while building large binaries.
   7188 
   7189   Language Specific Changes
   7190 
   7191     C++
   7192 
   7193    GCC 8.2 fixed a bug introduced in GCC 8.1 affecting passing or
   7194    returning of classes with a deleted copy constructor and defaulted
   7195    trivial move constructor (bug [59]c++/86094). GCC 8.2 introduces
   7196    -fabi-version=13 and makes it the default, ABI incompatibilities
   7197    between GCC 8.1 and 8.2 can be reported with -Wabi=12. See [60]C++
   7198    changes for more details.
   7199 
   7200   Target Specific Changes
   7201 
   7202     IA-32/x86-64
   7203 
   7204      * -mtune=native performance regression [61]PR84413 on Intel Skylake
   7205        processors has been fixed.
   7206 
   7207 [62]GCC 8.3
   7208 
   7209    This is the [63]list of problem reports (PRs) from GCC's bug tracking
   7210    system that are known to be fixed in the 8.3 release. This list might
   7211    not be complete (that is, it is possible that some PRs that have been
   7212    fixed are not listed here).
   7213 
   7214   Windows
   7215 
   7216      * A C++ Microsoft ABI bitfield layout bug, [64]PR87137 has been
   7217        fixed. A non-field declaration could cause the current bitfield
   7218        allocation unit to be completed, incorrectly placing a following
   7219        bitfield into a new allocation unit. The Microsoft ABI is selected
   7220        for:
   7221           + Mingw targets
   7222           + PowerPC, IA-32 or x86-64 targets when the -mms-bitfields
   7223             option is specified, or __attribute__((ms_struct)) is used
   7224           + SuperH targets when the -mhitachi option is specified, or
   7225             __attribute__((renesas)) is used
   7226        GCC 8 introduced additional cases of this defect, but rather than
   7227        resolve only those regressions, we decided to resolve all the cases
   7228        of this defect in single change.
   7229 
   7230 [65]GCC 8.4
   7231 
   7232    This is the [66]list of problem reports (PRs) from GCC's bug tracking
   7233    system that are known to be fixed in the 8.4 release. This list might
   7234    not be complete (that is, it is possible that some PRs that have been
   7235    fixed are not listed here).
   7236 
   7237 [67]GCC 8.5
   7238 
   7239    This is the [68]list of problem reports (PRs) from GCC's bug tracking
   7240    system that are known to be fixed in the 8.5 release. This list might
   7241    not be complete (that is, it is possible that some PRs that have been
   7242    fixed are not listed here).
   7243 
   7244   Target Specific Changes
   7245 
   7246     AArch64
   7247 
   7248      * The option -moutline-atomics has been added to aid deployment of
   7249        the Large System Extensions (LSE) on GNU/Linux systems built with a
   7250        baseline architecture targeting Armv8-A. When the option is
   7251        specified code is emitted to detect the presence of LSE
   7252        instructions at run time and use them for standard atomic
   7253        operations. For more information please refer to the documentation.
   7254 
   7255 
   7256     For questions related to the use of GCC, please consult these web
   7257     pages and the [69]GCC manuals. If that fails, the
   7258     [70]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   7259     web pages and the development of GCC are welcome on our developer
   7260     list at [71]gcc (a] gcc.gnu.org. All of [72]our lists have public
   7261     archives.
   7262 
   7263    Copyright (C) [73]Free Software Foundation, Inc. Verbatim copying and
   7264    distribution of this entire article is permitted in any medium,
   7265    provided this notice is preserved.
   7266 
   7267    These pages are [74]maintained by the GCC team. Last modified
   7268    2025-01-31.
   7269 
   7270 References
   7271 
   7272    1. https://gcc.gnu.org/gcc-8/porting_to.html
   7273    2. https://gcc.gnu.org/onlinedocs/index.html#current
   7274    3. https://gcc.gnu.org/ml/gcc/2018-04/msg00102.html
   7275    4. https://gcc.gnu.org/gcc-8/changes.html#general
   7276    5. https://gcc.gnu.org/gcc-8/changes.html#languages
   7277    6. https://gcc.gnu.org/gcc-8/changes.html#ada
   7278    7. https://gcc.gnu.org/gcc-8/changes.html#brig
   7279    8. https://gcc.gnu.org/gcc-8/changes.html#c-family
   7280    9. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options.html#index-Wmultistatement-macros
   7281   10. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options.html#index-Wstringop-truncation
   7282   11. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82944
   7283   12. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options.html#index-Wif-not-aligned
   7284   13. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Common-Variable-Attributes.html#index-warn_005fif_005fnot_005faligned-variable-attribute
   7285   14. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options.html#index-Wmissing-attributes
   7286   15. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options.html#index-Wpacked-not-aligned
   7287   16. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options.html#index-Warray-bounds
   7288   17. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options.html#index-Wrestrict
   7289   18. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options.html#index-Wformat-overflow
   7290   19. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options.html#index-Wformat-truncation
   7291   20. https://gcc.gnu.org/gcc-8/changes.html#c
   7292   21. https://gcc.gnu.org/gcc-8/changes.html#cxx
   7293   22. https://gcc.gnu.org/PR86094
   7294   23. https://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Dialect-Options.html#index-Wclass-memaccess
   7295   24. https://gcc.gnu.org/projects/cxx-status.html#cxx2a
   7296   25. https://gcc.gnu.org/gcc-8/changes.html#libstdcxx
   7297   26. https://gcc.gnu.org/gcc-8/changes.html#fortran
   7298   27. https://gcc.gnu.org/gcc-8/changes.html#go
   7299   28. https://gcc.gnu.org/gcc-8/changes.html#jit
   7300   29. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/jit/topics/types.html#gcc_jit_type_get_vector
   7301   30. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/jit/topics/expressions.html#gcc_jit_context_new_rvalue_from_vector
   7302   31. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/jit/topics/types.html#gcc_jit_type_get_aligned
   7303   32. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/jit/topics/function-pointers.html#gcc_jit_function_get_address
   7304   33. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/jit/topics/contexts.html#gcc_jit_context_dump_reproducer_to_file
   7305   34. https://gcc.gnu.org/gcc-8/changes.html#targets
   7306   35. https://gcc.gnu.org/gcc-8/changes.html#aarch64
   7307   36. https://gcc.gnu.org/gcc-8/changes.html#arc
   7308   37. https://gcc.gnu.org/gcc-8/changes.html#arm
   7309   38. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/ARM-Options.html#ARM-Options
   7310   39. https://gcc.gnu.org/gcc-8/changes.html#avr
   7311   40. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/AVR-Options.html
   7312   41. https://sourceware.org/PR21472
   7313   42. https://gcc.gnu.org/PR20296
   7314   43. https://sourceware.org/binutils/docs-2.29/as/AVR-Pseudo-Instructions.html
   7315   44. https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/AVR-Function-Attributes.html
   7316   45. https://sourceware.org/PR21683
   7317   46. https://gcc.gnu.org/gcc-8/changes.html#x86
   7318   47. https://gcc.gnu.org/gcc-8/changes.html#nds32
   7319   48. https://gcc.gnu.org/gcc-8/changes.html#nios2
   7320   49. https://gcc.gnu.org/gcc-8/changes.html#hppa
   7321   50. https://gcc.gnu.org/gcc-8/changes.html#powerpc
   7322   51. https://gcc.gnu.org/gcc-8/changes.html#Tile
   7323   52. https://gcc.gnu.org/gcc-8/changes.html#os
   7324   53. https://gcc.gnu.org/gcc-8/changes.html#windows
   7325   54. https://gcc.gnu.org/gcc-8/changes.html#plugins
   7326   55. https://gcc.gnu.org/gcc-8/changes.html#GCC8.1
   7327   56. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=8.0
   7328   57. https://gcc.gnu.org/gcc-8/changes.html#GCC8.2
   7329   58. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=8.2
   7330   59. https://gcc.gnu.org/PR86094
   7331   60. https://gcc.gnu.org/gcc-8/changes.html#cxx
   7332   61. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84413
   7333   62. https://gcc.gnu.org/gcc-8/changes.html#GCC8.3
   7334   63. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=8.3
   7335   64. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87137
   7336   65. https://gcc.gnu.org/gcc-8/changes.html#GCC8.4
   7337   66. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=8.4
   7338   67. https://gcc.gnu.org/gcc-8/changes.html#GCC8.5
   7339   68. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=8.5
   7340   69. https://gcc.gnu.org/onlinedocs/
   7341   70. mailto:gcc-help (a] gcc.gnu.org
   7342   71. mailto:gcc (a] gcc.gnu.org
   7343   72. https://gcc.gnu.org/lists.html
   7344   73. https://www.fsf.org/
   7345   74. https://gcc.gnu.org/about.html
   7346 ======================================================================
   7347 http://gcc.gnu.org/gcc-7/index.html
   7348 
   7349                               GCC 7 Release Series
   7350 
   7351    (This release series is no longer supported.)
   7352 
   7353    Nov 14, 2019
   7354 
   7355    The [1]GNU project and the GCC developers are pleased to announce the
   7356    release of GCC 7.5.
   7357 
   7358    This release is a bug-fix release, containing fixes for regressions in
   7359    GCC 7.4 relative to previous releases of GCC.
   7360 
   7361 Release History
   7362 
   7363    GCC 7.5
   7364           Nov 14, 2019 ([2]changes, [3]documentation)
   7365 
   7366    GCC 7.4
   7367           Dec 6, 2018 ([4]changes, [5]documentation)
   7368 
   7369    GCC 7.3
   7370           Jan 25, 2018 ([6]changes, [7]documentation)
   7371 
   7372    GCC 7.2
   7373           Aug 14, 2017 ([8]changes, [9]documentation)
   7374 
   7375    GCC 7.1
   7376           May 2, 2017 ([10]changes, [11]documentation)
   7377 
   7378 References and Acknowledgements
   7379 
   7380    GCC used to stand for the GNU C Compiler, but since the compiler
   7381    supports several other languages aside from C, it now stands for the
   7382    GNU Compiler Collection.
   7383 
   7384    A list of [12]successful builds is updated as new information becomes
   7385    available.
   7386 
   7387    The GCC developers would like to thank the numerous people that have
   7388    contributed new features, improvements, bug fixes, and other changes as
   7389    well as test results to GCC. This [13]amazing group of volunteers is
   7390    what makes GCC successful.
   7391 
   7392    For additional information about GCC please refer to the [14]GCC
   7393    project web site or contact the [15]GCC development mailing list.
   7394 
   7395    To obtain GCC please use [16]our mirror sites or [17]our version
   7396    control system.
   7397 
   7398 
   7399     For questions related to the use of GCC, please consult these web
   7400     pages and the [18]GCC manuals. If that fails, the
   7401     [19]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   7402     web pages and the development of GCC are welcome on our developer
   7403     list at [20]gcc (a] gcc.gnu.org. All of [21]our lists have public
   7404     archives.
   7405 
   7406    Copyright (C) [22]Free Software Foundation, Inc. Verbatim copying and
   7407    distribution of this entire article is permitted in any medium,
   7408    provided this notice is preserved.
   7409 
   7410    These pages are [23]maintained by the GCC team. Last modified
   7411    2024-05-30.
   7412 
   7413 References
   7414 
   7415    1. http://www.gnu.org/
   7416    2. https://gcc.gnu.org/gcc-7/changes.html
   7417    3. https://gcc.gnu.org/onlinedocs/7.5.0/
   7418    4. https://gcc.gnu.org/gcc-7/changes.html
   7419    5. https://gcc.gnu.org/onlinedocs/7.4.0/
   7420    6. https://gcc.gnu.org/gcc-7/changes.html
   7421    7. https://gcc.gnu.org/onlinedocs/7.3.0/
   7422    8. https://gcc.gnu.org/gcc-7/changes.html
   7423    9. https://gcc.gnu.org/onlinedocs/7.2.0/
   7424   10. https://gcc.gnu.org/gcc-7/changes.html
   7425   11. https://gcc.gnu.org/onlinedocs/7.1.0/
   7426   12. https://gcc.gnu.org/gcc-7/buildstat.html
   7427   13. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   7428   14. https://gcc.gnu.org/index.html
   7429   15. mailto:gcc (a] gcc.gnu.org
   7430   16. https://gcc.gnu.org/mirrors.html
   7431   17. https://gcc.gnu.org/git.html
   7432   18. https://gcc.gnu.org/onlinedocs/
   7433   19. mailto:gcc-help (a] gcc.gnu.org
   7434   20. mailto:gcc (a] gcc.gnu.org
   7435   21. https://gcc.gnu.org/lists.html
   7436   22. https://www.fsf.org/
   7437   23. https://gcc.gnu.org/about.html
   7438 ======================================================================
   7439 http://gcc.gnu.org/gcc-7/changes.html
   7440 
   7441                               GCC 7 Release Series
   7442                         Changes, New Features, and Fixes
   7443 
   7444    This page is a brief summary of some of the huge number of improvements
   7445    in GCC 7. For more information, see the [1]Porting to GCC 7 page and
   7446    the [2]full GCC documentation.
   7447 
   7448 Caveats
   7449 
   7450      * GCC now uses [3]LRA (a new local register allocator) by default for
   7451        new targets.
   7452      * The non-standard C++0x type traits has_trivial_default_constructor,
   7453        has_trivial_copy_constructor and has_trivial_copy_assign have been
   7454        removed.
   7455      * The libstdc++ [4]Profile Mode has been deprecated and will be
   7456        removed in a future version.
   7457      * The Cilk+ extensions to the C and C++ languages have been
   7458        deprecated.
   7459      * On ARM targets (arm*-*-*), [5]a bug introduced in GCC 5 that
   7460        affects conformance to the procedure call standard (AAPCS) has been
   7461        fixed. The bug affects some C++ code where class objects are passed
   7462        by value to functions and could result in incorrect or inconsistent
   7463        code being generated. This is an ABI change. If the option -Wpsabi
   7464        is enabled (on by default) the compiler will emit a diagnostic note
   7465        for code that might be affected.
   7466 
   7467 [6]General Optimizer Improvements
   7468 
   7469      * GCC 7 can determine the return value or range of return values of
   7470        some calls to the sprintf family of functions and make it available
   7471        to other optimization passes. Some calls to the snprintf function
   7472        with a zero size argument can be folded into constants. This
   7473        optimization is included in -O1 and can be selectively controlled
   7474        by the -fprintf-return-value option.
   7475      * A new store merging pass has been added. It merges constant stores
   7476        to adjacent memory locations into fewer, wider, stores. It is
   7477        enabled by the -fstore-merging option and at the -O2 optimization
   7478        level or higher (and -Os).
   7479      * A new code hoisting optimization has been added to the partial
   7480        redundancy elimination pass. It attempts to move evaluation of
   7481        expressions executed on all paths to the function exit as early as
   7482        possible. This primarily helps improve code size, but can improve
   7483        the speed of the generated code as well. It is enabled by the
   7484        -fcode-hoisting option and at the -O2 optimization level or higher
   7485        (and -Os).
   7486      * A new interprocedural bitwise constant propagation optimization has
   7487        been added, which propagates knowledge about which bits of
   7488        variables are known to be zero (including pointer alignment
   7489        information) across the call graph. It is enabled by the
   7490        -fipa-bit-cp option if -fipa-cp is enabled as well, and is enabled
   7491        at the -O2 optimization level and higher (and -Os). This
   7492        optimization supersedes interprocedural alignment propagation of
   7493        GCC 6, and therefore the option -fipa-cp-alignment is now
   7494        deprecated and ignored.
   7495      * A new interprocedural value range propagation optimization has been
   7496        added, which propagates integral range information across the call
   7497        graph when variable values can be proven to be within those ranges.
   7498        It is enabled by the -fipa-vrp option and at the -O2 optimization
   7499        level and higher (and -Os).
   7500      * A new loop splitting optimization pass has been added. Certain
   7501        loops which contain a condition that is always true on one side of
   7502        the iteration space and always false on the other are split into
   7503        two loops, such that each of the two new loops iterates on just one
   7504        side of the iteration space and the condition does not need to be
   7505        checked inside of the loop. It is enabled by the -fsplit-loops
   7506        option and at the -O3 optimization level or higher.
   7507      * The shrink-wrapping optimization can now separate portions of
   7508        prologues and epilogues to improve performance if some of the work
   7509        done traditionally by prologues and epilogues is not needed on
   7510        certain paths. This is controlled by the -fshrink-wrap-separate
   7511        option, enabled by default. It requires target support, which is
   7512        currently only implemented in the PowerPC and AArch64 ports.
   7513      * AddressSanitizer gained a new sanitization option,
   7514        -fsanitize-address-use-after-scope, which enables sanitization of
   7515        variables whose address is taken and used after a scope where the
   7516        variable is defined:
   7517 
   7518 int
   7519 main (int argc, char **argv)
   7520 {
   7521   char *ptr;
   7522     {
   7523       char my_char;
   7524       ptr = &my_char;
   7525     }
   7526 
   7527   *ptr = 123;
   7528   return *ptr;
   7529 }
   7530 
   7531 ==28882==ERROR: AddressSanitizer: stack-use-after-scope on address 0x7fffb8dba99
   7532 0 at pc 0x0000004006d5 bp 0x7fffb8dba960 sp 0x7fffb8dba958
   7533 WRITE of size 1 at 0x7fffb8dba990 thread T0
   7534     #0 0x4006d4 in main /tmp/use-after-scope-1.c:10
   7535     #1 0x7f9c71943290 in __libc_start_main (/lib64/libc.so.6+0x20290)
   7536     #2 0x400739 in _start (/tmp/a.out+0x400739)
   7537 
   7538 Address 0x7fffb8dba990 is located in stack of thread T0 at offset 32 in frame
   7539     #0 0x40067f in main /tmp/use-after-scope-1.c:3
   7540 
   7541   This frame has 1 object(s):
   7542     [32, 33) 'my_char' <== Memory access at offset 32 is inside this variable
   7543 
   7544        The option is enabled by default with -fsanitize=address and
   7545        disabled by default with -fsanitize=kernel-address. Compared to the
   7546        LLVM compiler, where the option already exists, the implementation
   7547        in the GCC compiler has some improvements and advantages:
   7548           + Complex uses of gotos and case labels are properly handled and
   7549             should not report any false positive or false negatives.
   7550           + C++ temporaries are sanitized.
   7551           + Sanitization can handle invalid memory stores that are
   7552             optimized out by the LLVM compiler when optimization is
   7553             enabled.
   7554      * The -fsanitize=signed-integer-overflow suboption of the
   7555        UndefinedBehavior Sanitizer now diagnoses arithmetic overflows even
   7556        on arithmetic operations with generic vectors.
   7557      * Version 5 of the DWARF debugging information standard is supported
   7558        through the -gdwarf-5 option. The DWARF version 4 debugging
   7559        information remains the default until consumers of debugging
   7560        information are adjusted.
   7561 
   7562 [7]New Languages and Language specific improvements
   7563 
   7564    OpenACC support in C, C++, and Fortran continues to be maintained and
   7565    improved. See the [8]OpenACC and [9]Offloading wiki pages for further
   7566    information.
   7567 
   7568   [10]Ada
   7569 
   7570      * On mainstream native platforms, Ada programs no longer require the
   7571        stack to be made executable in order to run properly.
   7572 
   7573   [11]BRIG (HSAIL)
   7574 
   7575    Support for processing BRIG 1.0 files was added in this release. BRIG
   7576    is a binary format for HSAIL (Heterogeneous System Architecture
   7577    Intermediate Language). The BRIG front end can be used for implementing
   7578    HSAIL "finalizers" (compilation of HSAIL to a native ISA) for
   7579    GCC-supported targets. An implementation of an HSAIL runtime library,
   7580    libhsail-rt is also included.
   7581 
   7582   [12]C family
   7583 
   7584      * New command-line options have been added for the C and C++
   7585        compilers:
   7586           + -Wimplicit-fallthrough warns when a switch case falls through.
   7587             This warning has five different levels. The compiler is able
   7588             to parse a wide range of fallthrough comments, depending on
   7589             the level. It also handles control-flow statements, such as
   7590             ifs. It's possible to suppress the warning by either adding a
   7591             fallthrough comment, or by using a null statement:
   7592             __attribute__ ((fallthrough)); (C, C++), or [[fallthrough]];
   7593             (C++17), or [[gnu::fallthrough]]; (C++11/C++14). This warning
   7594             is enabled by -Wextra.
   7595           + -Wpointer-compare warns when a pointer is compared with a zero
   7596             character constant. Such code is now invalid in C++11 and GCC
   7597             rejects it. This warning is enabled by default.
   7598           + -Wduplicated-branches warns when an if-else has identical
   7599             branches.
   7600           + -Wrestrict warns when an argument passed to a
   7601             restrict-qualified parameter aliases with another argument.
   7602           + -Wmemset-elt-size warns for memset calls, when the first
   7603             argument references an array, and the third argument is a
   7604             number equal to the number of elements of the array, but not
   7605             the size of the array. This warning is enabled by -Wall.
   7606           + -Wint-in-bool-context warns about suspicious uses of integer
   7607             values where boolean values are expected. This warning is
   7608             enabled by -Wall.
   7609           + -Wswitch-unreachable warns when a switch statement has
   7610             statements between the controlling expression and the first
   7611             case label which will never be executed. This warning is
   7612             enabled by default.
   7613           + -Wexpansion-to-defined warns when defined is used outside #if.
   7614             This warning is enabled by -Wextra or -Wpedantic.
   7615           + -Wregister warns about uses of the register storage specifier.
   7616             In C++17 this keyword has been removed and for C++17 this is a
   7617             pedantic warning enabled by default. The warning is not
   7618             emitted for the GNU Explicit Register Variables extension.
   7619           + -Wvla-larger-than=N warns about unbounded uses of
   7620             variable-length arrays, and about bounded uses of
   7621             variable-length arrays whose bound can be larger than N bytes.
   7622           + -Wduplicate-decl-specifier warns when a declaration has
   7623             duplicate const, volatile, restrict or _Atomic specifier. This
   7624             warning is enabled by -Wall.
   7625      * GCC 6's C and C++ front ends were able to offer suggestions for
   7626        misspelled field names:
   7627 
   7628 spellcheck-fields.cc:52:13: error: 'struct s' has no member named 'colour'; did
   7629 you mean 'color'?
   7630    return ptr->colour;
   7631                ^~~~~~
   7632 
   7633        GCC 7 greatly expands the scope of these suggestions. Firstly, it
   7634        adds fix-it hints to such suggestions:
   7635 
   7636 spellcheck-fields.cc:52:13: error: 'struct s' has no member named 'colour'; did
   7637 you mean 'color'?
   7638    return ptr->colour;
   7639                ^~~~~~
   7640                color
   7641 
   7642        The suggestions now cover many other things, such as misspelled
   7643        function names:
   7644 
   7645 spellcheck-identifiers.c:11:3: warning: implicit declaration of function 'gtk_wi
   7646 dget_showall'; did you mean 'gtk_widget_show_all'? [-Wimplicit-function-declarat
   7647 ion]
   7648    gtk_widget_showall (w);
   7649    ^~~~~~~~~~~~~~~~~~
   7650    gtk_widget_show_all
   7651 
   7652        misspelled macro names and enum values:
   7653 
   7654 spellcheck-identifiers.cc:85:11: error: 'MAX_ITEM' undeclared here (not in a fun
   7655 ction); did you mean 'MAX_ITEMS'?
   7656  int array[MAX_ITEM];
   7657            ^~~~~~~~
   7658            MAX_ITEMS
   7659 
   7660        misspelled type names:
   7661 
   7662 spellcheck-typenames.c:7:14: error: unknown type name 'singed'; did you mean 'si
   7663 gned'?
   7664  void test (singed char e);
   7665             ^~~~~~
   7666             signed
   7667 
   7668        and, in the C front end, named initializers:
   7669 
   7670 test.c:7:20: error: 'struct s' has no member named 'colour'; did you mean 'color
   7671 '?
   7672  struct s test = { .colour = 3 };
   7673                     ^~~~~~
   7674                     color
   7675 
   7676      * The preprocessor can now offer suggestions for misspelled
   7677        directives, e.g.:
   7678 
   7679 test.c:5:2: error:invalid preprocessing directive #endfi; did you mean #endif?
   7680  #endfi
   7681   ^~~~~
   7682   endif
   7683 
   7684      * Warnings about format strings now underline the pertinent part of
   7685        the string, and can offer suggested fixes. In some cases, the
   7686        pertinent argument is underlined.
   7687 
   7688 test.c:51:29: warning: format '%s' expects argument of type 'char *', but argume
   7689 nt 3 has type 'int' [-Wformat=]
   7690    printf ("foo: %d  bar: %s baz: %d", 100, i + j, 102);
   7691                           ~^                ~~~~~
   7692                           %d
   7693 
   7694      * The new -Wdangling-else command-line option has been split out of
   7695        -Wparentheses and warns about dangling else.
   7696      * The -Wshadow warning has been split into three variants.
   7697        -Wshadow=global warns for any shadowing. This is the default when
   7698        using -Wshadow without any argument. -Wshadow=local only warns for
   7699        a local variable shadowing another local variable or parameter.
   7700        -Wshadow=compatible-local only warns for a local variable shadowing
   7701        another local variable or parameter whose type is compatible (in
   7702        C++ compatible means that the type of the shadowing variable can be
   7703        converted to that of the shadowed variable).
   7704        The following example shows the different kinds of shadow warnings:
   7705 
   7706 enum operation { add, count };
   7707 struct container { int nr; };
   7708 
   7709 int
   7710 container_count (struct container c, int count)
   7711 {
   7712   int r = 0;
   7713   for (int count = 0; count > 0; count--)
   7714     {
   7715       struct container count = c;
   7716       r += count.nr;
   7717     }
   7718   return r;
   7719 }
   7720 
   7721        -Wshadow=compatible-local will warn for the parameter being
   7722        shadowed with the same type:
   7723 
   7724 warn-test.c:8:12: warning: declaration of 'count' shadows a parameter [-Wshadow=
   7725 compatible-local]
   7726    for (int count = 0; count > 0; count--)
   7727             ^~~~~
   7728 warn-test.c:5:42: note: shadowed declaration is here
   7729  container_count (struct container c, int count)
   7730                                           ^~~~~
   7731 
   7732        -Wshadow=local will warn for the above and for the shadowed
   7733        declaration with incompatible type:
   7734 
   7735 warn-test.c:10:24: warning: declaration of 'count' shadows a previous local [-Ws
   7736 hadow=local]
   7737        struct container count = c;
   7738                         ^~~~~
   7739 warn-test.c:8:12: note: shadowed declaration is here
   7740    for (int count = 0; count > 0; count--)
   7741             ^~~~~
   7742 
   7743        -Wshadow=global will warn for all of the above and the shadowing of
   7744        the global declaration:
   7745 
   7746 warn-test.c:5:42: warning: declaration of 'count' shadows a global declaration [
   7747 -Wshadow]
   7748  container_count (struct container c, int count)
   7749                                           ^~~~~
   7750 warn-test.c:1:23: note: shadowed declaration is here
   7751  enum operation { add, count };
   7752                        ^~~~~
   7753 
   7754      * GCC 7 contains a number of enhancements that help detect buffer
   7755        overflow and other forms of invalid memory accesses.
   7756           + The -Walloc-size-larger-than=size option detects calls to
   7757             standard and user-defined memory allocation functions
   7758             decorated with attribute alloc_size whose argument exceeds the
   7759             specified size (PTRDIFF_MAX by default). The option also
   7760             detects arithmetic overflow in the computation of the size in
   7761             two-argument allocation functions like calloc where the total
   7762             size is the product of the two arguments. Since calls with an
   7763             excessive size cannot succeed they are typically the result of
   7764             programming errors. Such bugs have been known to be the source
   7765             of security vulnerabilities and a target of exploits.
   7766             -Walloc-size-larger-than=PTRDIFF_MAX is included in -Wall.
   7767             For example, the following call to malloc incorrectly tries to
   7768             avoid passing a negative argument to the function and instead
   7769             ends up unconditionally invoking it with an argument less than
   7770             or equal to zero. Since after conversion to the type of the
   7771             argument of the function (size_t) a negative argument results
   7772             in a value in excess of the maximum PTRDIFF_MAX the call is
   7773             diagnosed.
   7774 
   7775 void* f (int n)
   7776 {
   7777   return malloc (n > 0 ? 0 : n);
   7778 }
   7779 
   7780 warning: argument 1 range [2147483648, 4294967295] exceeds maximum object size 2
   7781 147483647 [-Walloc-size-larger-than=]
   7782 
   7783           + The -Walloc-zero option detects calls to standard and
   7784             user-defined memory allocation functions decorated with
   7785             attribute alloc_size with a zero argument. -Walloc-zero is not
   7786             included in either -Wall or -Wextra and must be explicitly
   7787             enabled.
   7788           + The -Walloca option detects all calls to the alloca function
   7789             in the program. -Walloca is not included in either -Wall or
   7790             -Wextra and must be explicitly enabled.
   7791           + The -Walloca-larger-than=size option detects calls to the
   7792             alloca function whose argument either may exceed the specified
   7793             size, or that is not known to be sufficiently constrained to
   7794             avoid exceeding it. -Walloca-larger-than is not included in
   7795             either -Wall or -Wextra and must be explicitly enabled.
   7796             For example, compiling the following snippet with
   7797             -Walloca-larger-than=1024 results in a warning because even
   7798             though the code appears to call alloca only with sizes of 1kb
   7799             and less, since n is signed, a negative value would result in
   7800             a call to the function well in excess of the limit.
   7801 
   7802 void f (int n)
   7803 {
   7804   char *d;
   7805   if (n < 1025)
   7806     d = alloca (n);
   7807   else
   7808     d = malloc (n);
   7809   ...
   7810 }
   7811 
   7812 warning: argument to 'alloca may be too large due to conversion from 'int' to 'l
   7813 ong unsigned int' [-Walloca-larger-than=]
   7814 
   7815             In contrast, a call to alloca that isn't bounded at all such
   7816             as in the following function will elicit the warning below
   7817             regardless of the size argument to the option.
   7818 
   7819 void f (size_t n)
   7820 {
   7821   char *d = alloca (n);
   7822   ...
   7823 }
   7824 
   7825 warning: unbounded use of 'alloca' [-Walloca-larger-than=]
   7826 
   7827           + The -Wformat-overflow=level option detects certain and likely
   7828             buffer overflow in calls to the sprintf family of formatted
   7829             output functions. Although the option is enabled even without
   7830             optimization it works best with -O2 and higher.
   7831             For example, in the following snippet the call to sprintf is
   7832             diagnosed because even though its output has been constrained
   7833             using the modulo operation it could result in as many as three
   7834             bytes if mday were negative. The solution is to either
   7835             allocate a larger buffer or make sure the argument is not
   7836             negative, for example by changing mday's type to unsigned or
   7837             by making the type of the second operand of the modulo
   7838             expression unsigned: 100U.
   7839 
   7840 void* f (int mday)
   7841 {
   7842   char *buf = malloc (3);
   7843   sprintf (buf, "%02i", mday % 100);
   7844   return buf;
   7845 }
   7846 
   7847 warning: 'sprintf may write a terminating nul past the end of the destination [-
   7848 Wformat-overflow=]
   7849 note: 'sprintf' output between 3 and 4 bytes into a destination of size 3
   7850 
   7851           + The -Wformat-truncation=level option detects certain and
   7852             likely output truncation in calls to the snprintf family of
   7853             formatted output functions. -Wformat-truncation=1 is included
   7854             in -Wall and enabled without optimization but works best with
   7855             -O2 and higher.
   7856             For example, the following function attempts to format an
   7857             integer between 0 and 255 in hexadecimal, including the 0x
   7858             prefix, into a buffer of four characters. But since the
   7859             function must always terminate output by the null character
   7860             ('\0') such a buffer is only big enough to fit just one digit
   7861             plus the prefix. Therefore the snprintf call is diagnosed. To
   7862             avoid the warning either use a bigger buffer or handle the
   7863             function's return value which indicates whether or not its
   7864             output has been truncated.
   7865 
   7866 void f (unsigned x)
   7867 {
   7868   char d[4];
   7869   snprintf (d, sizeof d, "%#02x", x & 0xff);
   7870   ...
   7871 }
   7872 
   7873 warning: 'snprintf' output may be truncated before the last format character [-W
   7874 format-truncation=]
   7875 note: 'snprintf' output between 3 and 5 bytes into a destination of size 4
   7876 
   7877           + The -Wnonnull option has been enhanced to detect a broader set
   7878             of cases of passing null pointers to functions that expect a
   7879             non-null argument (those decorated with attribute nonnull). By
   7880             taking advantage of optimizations the option can detect many
   7881             more cases of the problem than in prior GCC versions.
   7882           + The -Wstringop-overflow=type option detects buffer overflow in
   7883             calls to string handling functions like memcpy and strcpy. The
   7884             option relies on [13]Object Size Checking and has an effect
   7885             similar to defining the _FORTIFY_SOURCE macro.
   7886             -Wstringop-overflow=2 is enabled by default.
   7887             For example, in the following snippet, because the call to
   7888             strncat specifies a maximum that allows the function to write
   7889             past the end of the destination, it is diagnosed. To correct
   7890             the problem and avoid the overflow the function should be
   7891             called with a size of at most sizeof d - strlen(d) - 1.
   7892 
   7893 void f (const char *fname)
   7894 {
   7895   char d[8];
   7896   strncpy (d, "/tmp/", sizeof d);
   7897   strncat (d, fname, sizeof d);
   7898   ...
   7899 }
   7900 
   7901 warning: specified bound 8 equals the size of the destination [-Wstringop-overfl
   7902 ow=]
   7903 
   7904      * The <limits.h> header provided by GCC defines macros such as
   7905        INT_WIDTH for the width in bits of integer types, if
   7906        __STDC_WANT_IEC_60559_BFP_EXT__ is defined before the header is
   7907        included. The <stdint.h> header defines such macros as SIZE_WIDTH
   7908        and INTMAX_WIDTH for the width of some standard typedef names for
   7909        integer types, again if __STDC_WANT_IEC_60559_BFP_EXT__ is defined
   7910        before the header is included; note that GCC's implementation of
   7911        this header is only used for freestanding compilations, not hosted
   7912        compilations, on most systems. These macros come from ISO/IEC TS
   7913        18661-1:2014.
   7914      * The <float.h> header provided by GCC defines the macro
   7915        CR_DECIMAL_DIG, from ISO/IEC TS 18661-1:2014, if
   7916        __STDC_WANT_IEC_60559_BFP_EXT__ is defined before the header is
   7917        included. This represents the number of decimal digits for which
   7918        conversions between decimal character strings and binary formats,
   7919        in both directions, are correctly rounded, and currently has the
   7920        value of UINTMAX_MAX on all systems, reflecting that GCC's
   7921        compile-time conversions are correctly rounded for any number of
   7922        digits.
   7923      * New __builtin_add_overflow_p, __builtin_sub_overflow_p,
   7924        __builtin_mul_overflow_p built-in functions have been added. These
   7925        work similarly to their siblings without the _p suffix, but do not
   7926        actually store the result of the arithmetics anywhere, just return
   7927        whether the operation would overflow. Calls to these built-ins with
   7928        integer constant arguments evaluate to integer constants
   7929        expressions.
   7930        For example, in the following, c is assigned the result of a * b
   7931        only if the multiplication does not overflow, otherwise it is
   7932        assigned the value zero. The multiplication is performed at
   7933        compile-time and without triggering a -Woverflow warning.
   7934 
   7935 enum {
   7936   a = 12345678,
   7937   b = 87654321,
   7938   c = __builtin_mul_overflow_p (a, b, a) ? 0 : a * b
   7939 };
   7940 
   7941   [14]C
   7942 
   7943      * The C front end now supports type names _FloatN for floating-point
   7944        types with IEEE interchange formats and _FloatNx for floating-point
   7945        types with IEEE extended formats. These type names come from
   7946        ISO/IEC TS 18661-3:2015.
   7947        The set of types supported depends on the target for which GCC is
   7948        configured. Most targets support _Float32, _Float32x and _Float64.
   7949        _Float128 is supported on targets where IEEE binary128 encoding was
   7950        already supported as long double or __float128. _Float64x is
   7951        supported on targets where a type with either binary128 or Intel
   7952        extended precision format is available.
   7953        Constants with these types are supported using suffixes fN, FN, fNx
   7954        and FNx (e.g., 1.2f128 or 2.3F64x). Macros such as FLT128_MAX are
   7955        defined in <float.h> if __STDC_WANT_IEC_60559_TYPES_EXT__ is
   7956        defined before it is included.
   7957        These new types are always distinct from each other and from float,
   7958        double and long double, even if they have the same encoding.
   7959        Complex types such as _Complex _Float128 are also supported.
   7960        Type-generic built-in functions such as __builtin_isinf support the
   7961        new types, and the following type-specific built-in functions have
   7962        versions (suffixed fN or fNx) for the new types:
   7963        __builtin_copysign, __builtin_fabs, __builtin_huge_val,
   7964        __builtin_inf, __builtin_nan, __builtin_nans.
   7965      * Compilation with -fopenmp is now compatible with the C11 _Atomic
   7966        keyword.
   7967 
   7968   [15]C++
   7969 
   7970      * The C++ front end has experimental support for all of the current
   7971        C++17 draft with the -std=c++1z or -std=gnu++1z flags, including if
   7972        constexpr, class template argument deduction, auto template
   7973        parameters, and structured bindings. For a full list of new
   7974        features, see [16]the C++ status page.
   7975      * C++17 support for new of over-aligned types can be enabled in other
   7976        modes with the -faligned-new flag.
   7977      * The C++17 evaluation order requirements can be selected in other
   7978        modes with the -fstrong-eval-order flag, or disabled in C++17 mode
   7979        with -fno-strong-eval-order.
   7980      * The default semantics of inherited constructors has changed in all
   7981        modes, following [17]P0136. Essentially, overload resolution
   7982        happens as if calling the inherited constructor directly, and the
   7983        compiler fills in construction of the other bases and members as
   7984        needed. Most uses should not need any changes. The old behavior can
   7985        be restored with -fno-new-inheriting-ctors, or -fabi-version less
   7986        than 11.
   7987      * The resolution of DR 150 on matching of template template
   7988        parameters, allowing default template arguments to make a template
   7989        match a parameter, is currently enabled by default in C++17 mode
   7990        only. The default can be overridden with -f{no-,}new-ttp-matching.
   7991      * The C++ front end will now provide fix-it hints for some missing
   7992        semicolons, allowing for automatic fixes by IDEs:
   7993 
   7994 test.cc:4:11: error: expected ';' after class definition
   7995  class a {}
   7996            ^
   7997            ;
   7998 
   7999      * -Waligned-new has been added to the C++ front end. It warns about
   8000        new of type with extended alignment without -faligned-new.
   8001 
   8002     [18]Runtime Library (libstdc++)
   8003 
   8004      * The type of exception thrown by iostreams, std::ios_base::failure,
   8005        now uses the [19]cxx11 ABI.
   8006      * Experimental support for C++17, including the following new
   8007        features:
   8008           + std::string_view;
   8009           + std::any, std::optional, and std::variant;
   8010           + std::invoke, std::is_invocable, std::is_nothrow_invocable, and
   8011             invoke_result;
   8012           + std::is_swappable, and std::is_nothrow_swappable;
   8013           + std::apply, and std::make_from_tuple;
   8014           + std::void_t, std::bool_constant, std::conjunction,
   8015             std::disjunction, and std::negation;
   8016           + Variable templates for type traits;
   8017           + Mathematical Special Functions;
   8018           + std::chrono::floor, std::chrono::ceil, std::chrono::round, and
   8019             std::chrono::abs;
   8020           + std::clamp, std::gcd, std::lcm, 3-dimensional std::hypot;
   8021           + std::scoped_lock, std::shared_mutex,
   8022             std::atomic<T>::is_always_lock_free;
   8023           + std::sample, std::default_searcher, std::boyer_moore_searcher
   8024             and std::boyer_moore_horspool_searcher;
   8025           + Extraction and re-insertion of map and set nodes, try_emplace
   8026             members for maps, and functions for accessing containers
   8027             std::size, std::empty, and std::data;
   8028           + std::shared_ptr support for arrays,
   8029             std::shared_ptr<T>::weak_type,
   8030             std::enable_shared_from_this<T>::weak_from_this(), and
   8031             std::owner_less<void>;
   8032           + std::byte;
   8033           + std::as_const, std::not_fn,
   8034             std::has_unique_object_representations, constexpr
   8035             std::addressof.
   8036        Thanks to Daniel Krgler, Tim Shen, Edward Smith-Rowland, and Ville
   8037        Voutilainen for work on the C++17 support.
   8038      * A new power-of-two rehashing policy for use with the _Hashtable
   8039        internals, thanks to Franois Dumont.
   8040 
   8041   [20]Fortran
   8042 
   8043      * Support for a number of extensions for compatibility with legacy
   8044        code with new flags:
   8045           + -fdec-structure Support for DEC STRUCTURE and UNION
   8046           + -fdec-intrinsic-ints Support for new integer intrinsics with
   8047             B/I/J/K prefixes such as BABS, JIAND...
   8048           + -fdec-math Support for additional math intrinsics, including
   8049             COTAN and degree-valued trigonometric functions such as TAND,
   8050             ASIND...
   8051           + -fdec Enable the -fdec-* family of extensions.
   8052      * New flag -finit-derived to allow default initialization of
   8053        derived-type variables.
   8054      * Improved DO loops with step equal to 1 or -1, generates faster code
   8055        without a loop preheader. A new warning, -Wundefined-do-loop, warns
   8056        when a loop iterates either to HUGE(i) (with step equal to 1), or
   8057        to -HUGE(i) (with step equal to -1). Invalid behavior can be caught
   8058        at run time with -fcheck=do enabled:
   8059 
   8060 program test
   8061   implicit none
   8062   integer(1) :: i
   8063   do i = -HUGE(i)+10, -HUGE(i)-1, -1
   8064     print *, i
   8065   end do
   8066 end program test
   8067 
   8068 At line 8 of file do_check_12.f90
   8069 Fortran runtime error: Loop iterates infinitely
   8070 
   8071      * Version 4.5 of the [21]OpenMP specification is now partially
   8072        supported in the Fortran compiler; the largest missing item is
   8073        structure element mapping.
   8074      * User-defined derived-type input/output (UDTIO) is added.
   8075      * Derived type coarrays with allocatable and pointer components are
   8076        partially supported.
   8077      * Non-constant stop codes and error stop codes (Fortran 2015
   8078        feature).
   8079      * Derived types with allocatable components of recursive type.
   8080      * Intrinsic assignment to polymorphic variables.
   8081      * Improved submodule support.
   8082      * Improved diagnostics (polymorphic results in pure functions).
   8083      * Coarray: Support for failed images (Fortan 2015 feature).
   8084 
   8085   [22]Go
   8086 
   8087      * GCC 7 provides a complete implementation of the Go 1.8.1 user
   8088        packages.
   8089      * Compared to the Go 1.8.1 toolchain, the garbage collector is more
   8090        conservative and less concurrent.
   8091      * Escape analysis is available for experimental use via the
   8092        -fgo-optimize-allocs option. The -fgo-debug-escape prints
   8093        information useful for debugging escape analysis choices.
   8094 
   8095   [23]Java (GCJ)
   8096 
   8097    The GCC Java front end and associated libjava runtime library have been
   8098    removed from GCC.
   8099 
   8100 [24]libgccjit
   8101 
   8102    The libgccjit API gained support for marking calls as requiring
   8103    tail-call optimization via a new entry point:
   8104    [25]gcc_jit_rvalue_set_bool_require_tail_call.
   8105 
   8106    libgccjit performs numerous checks at the API boundary, but if these
   8107    succeed, it previously ignored errors and other diagnostics emitted
   8108    within the core of GCC, and treated the compile of a gcc_jit_context as
   8109    having succeeded. As of GCC 7 it now ensures that if any diagnostics
   8110    are emitted, they are visible from the libgccjit API, and that the the
   8111    context is flagged as having failed.
   8112 
   8113 [26]New Targets and Target Specific Improvements
   8114 
   8115   [27]AArch64
   8116 
   8117      * GCC has been updated to the latest revision of the procedure call
   8118        standard (AAPCS64) to provide support for parameter passing when
   8119        data types have been over-aligned.
   8120      * The ARMv8.3-A architecture is now supported. It can be used by
   8121        specifying the -march=armv8.3-a option.
   8122      * The option -msign-return-address= is supported to enable return
   8123        address protection using ARMv8.3-A Pointer Authentication
   8124        Extensions. For more information on the arguments accepted by this
   8125        option, please refer to [28]AArch64-Options.
   8126      * The ARMv8.2-A architecture and the ARMv8.2-A 16-bit Floating-Point
   8127        Extensions are now supported. They can be used by specifying the
   8128        -march=armv8.2-a or -march=armv8.2-a+fp16 options. The 16-bit
   8129        Floating-Point Extensions introduce new half-precision data
   8130        processing floating-point instructions.
   8131      * Support has been added for the following processors (GCC
   8132        identifiers in parentheses): ARM Cortex-A73 (cortex-a73), Broadcom
   8133        Vulcan (vulcan), Cavium ThunderX CN81xx (thunderxt81), Cavium
   8134        ThunderX CN83xx (thunderxt83), Cavium ThunderX CN88xx
   8135        (thunderxt88), Cavium ThunderX CN88xx pass 1.x (thunderxt88p1),
   8136        Cavium ThunderX 2 CN99xx (thunderx2t99), Qualcomm Falkor (falkor).
   8137        The GCC identifiers can be used as arguments to the -mcpu or -mtune
   8138        options, for example: -mcpu=cortex-a73 or -mtune=vulcan or as
   8139        arguments to the equivalent target attributes and pragmas.
   8140 
   8141   [29]ARC
   8142 
   8143      * Added support for ARC HS and ARC EM processors.
   8144      * Added support for ARC EM variation found in Intel QuarkSE SoCs.
   8145      * Added support for NPS400 ARC700 based CPUs.
   8146      * Thread Local Storage is now supported by ARC CPUs.
   8147      * Fixed errors for ARC600 when using 32x16 multiplier option.
   8148      * Fixed PIE for ARC CPUs.
   8149      * New CPU templates are supported via multilib.
   8150 
   8151   [30]ARM
   8152 
   8153      * Support for the ARMv5 and ARMv5E architectures has been deprecated
   8154        (which have no known implementations) and will be removed in a
   8155        future GCC release. Note that ARMv5T, ARMv5TE and ARMv5TEJ
   8156        architectures remain supported. The values armv5 and armv5e of
   8157        -march are thus deprecated.
   8158      * The ARMv8.2-A architecture and the ARMv8.2-A 16-bit Floating-Point
   8159        Extensions are now supported. They can be used by specifying the
   8160        -march=armv8.2-a or -march=armv8.2-a+fp16 options. The 16-bit
   8161        Floating-Point Extensions introduce new half-precision data
   8162        processing floating-point instructions.
   8163      * The ARMv8-M architecture is now supported in its two architecture
   8164        profiles: ARMv8-M Baseline and ARMv8-M Mainline with its DSP and
   8165        Floating-Point Extensions. They can be used by specifying the
   8166        -march=armv8-m.base, armv8-m.main or armv8-m.main+dsp options.
   8167      * Support has been added for the following processors (GCC
   8168        identifiers in parentheses): ARM Cortex-A73 (cortex-a73), ARM
   8169        Cortex-M23 (cortex-m23) and ARM Cortex-M33 (cortex-m33). The GCC
   8170        identifiers can be used as arguments to the -mcpu or -mtune
   8171        options, for example: -mcpu=cortex-a73 or -mtune=cortex-m33.
   8172      * A new command-line option -mpure-code has been added. It does not
   8173        allow constant data to be placed in code sections. This option is
   8174        only available when generating non-PIC code for ARMv7-M targets.
   8175      * Support for the ACLE Coprocessor Intrinsics has been added. This
   8176        enables the generation of coprocessor instructions through the use
   8177        of intrinsics such as cdp, ldc, and others.
   8178      * The configure option --with-multilib-list now accepts the value
   8179        rmprofile to build multilib libraries for a range of embedded
   8180        targets. See our [31]installation instructions for details.
   8181 
   8182   [32]AVR
   8183 
   8184      * On the reduced Tiny cores, the progmem [33]variable attribute is
   8185        now properly supported. Respective read-only variables are located
   8186        in flash memory in section .progmem.data. No special code is needed
   8187        to access such variables; the compiler automatically adds an offset
   8188        of 0x4000 to all addresses, which is needed to access variables in
   8189        flash memory. As opposed to ordinary cores where it is sufficient
   8190        to specify the progmem attribute with definitions, on the reduced
   8191        Tiny cores the attribute also has to be specified with (external)
   8192        declarations:
   8193 
   8194 extern const int array[] __attribute__((__progmem__));
   8195 
   8196 int get_value2 (void)
   8197 {
   8198   /* Access via addresses array + 0x4004 and array + 0x4005. */
   8199   return array[2];
   8200 }
   8201 
   8202 const int* get_address (unsigned idx)
   8203 {
   8204   /* Returns array + 0x4000 + 2 * idx. */
   8205   return &array[idx];
   8206 }
   8207 
   8208      * A new command-line option -Wmisspelled-isr has been added. It turns
   8209        off -- or turns into errors -- warnings that are reported for
   8210        interrupt service routines (ISRs) which don't follow AVR-LibC's
   8211        naming convention of prefixing ISR names with __vector.
   8212      * __builtin_avr_nops(n) is a new [34]built-in function that inserts n
   8213        NOP instructions into the instruction stream. n must be a value
   8214        known at compile time.
   8215 
   8216   [35]IA-32/x86-64
   8217 
   8218      * Support for the AVX-512 Fused Multiply Accumulation Packed Single
   8219        precision (4FMAPS), AVX-512 Vector Neural Network Instructions Word
   8220        variable precision (4VNNIW), AVX-512 Vector Population Count
   8221        (VPOPCNTDQ) and Software Guard Extensions (SGX) ISA extensions has
   8222        been added.
   8223 
   8224   [36]NVPTX
   8225 
   8226      * OpenMP target regions can now be offloaded to NVidia PTX GPGPUs.
   8227        See the [37]Offloading Wiki on how to configure it.
   8228 
   8229   [38]PowerPC / PowerPC64 / RS6000
   8230 
   8231      * The PowerPC port now uses LRA by default.
   8232      * GCC now diagnoses inline assembly that clobbers register r2. This
   8233        has always been invalid code, and is no longer quietly tolerated.
   8234      * The PowerPC port's support for ISA 3.0 (-mcpu=power9) has been
   8235        enhanced to generate more of the new instructions by default, and
   8236        to provide more built-in functions to generate code for other new
   8237        instructions.
   8238      * The configuration option --enable-gnu-indirect-function is now
   8239        enabled by default on PowerPC GNU/Linux builds.
   8240      * The PowerPC port will now allow 64-bit and 32-bit integer types to
   8241        be allocated to the VSX vector registers (ISA 2.06 and above). In
   8242        addition, on ISA 3.0, 16-bit and 8-bit integer types can be
   8243        allocated in the vector registers. Previously, only 64-bit integer
   8244        types were allowed in the traditional floating point registers.
   8245      * New options -mstack-protector-guard=global,
   8246        -mstack-protector-guard=tls, -mstack-protector-guard-reg=, and
   8247        -mstack-protector-guard-offset= change how the stack protector gets
   8248        the value to use as canary.
   8249 
   8250   [39]S/390, System z, IBM z Systems, IBM Z
   8251 
   8252      * Support for the IBM z14 processor has been added. When using the
   8253        -march=z14 option, the compiler will generate code making use of
   8254        the new instructions introduced with the vector enhancement
   8255        facility and the miscellaneous instruction extension facility 2.
   8256        The -mtune=z14 option enables z14 specific instruction scheduling
   8257        without making use of new instructions.
   8258      * Builtins for the new vector instructions have been added and can be
   8259        enabled using the -mzvector option.
   8260 
   8261   [40]RISC-V
   8262 
   8263      * Support for the RISC-V instruction set has been added.
   8264 
   8265   [41]RX
   8266 
   8267    Basic support for atomic built-in function has been added. It is
   8268    currently implemented by flipping interrupts off and on as needed.
   8269 
   8270   [42]SH
   8271 
   8272      * Support for SH5/SH64 has been removed.
   8273      * Improved utilization of delay slots on SH2A.
   8274      * Improved utilization of zero-displacement conditional branches.
   8275      * The following deprecated options have been removed
   8276           + -mcbranchdi
   8277           + -mcmpeqdi
   8278           + -minvalid-symbols
   8279           + -msoft-atomic
   8280           + -mspace
   8281           + -madjust-unroll
   8282      * Support for the following SH2A instructions has been added
   8283           + mov.b @-Rm,R0
   8284           + mov.w @-Rm,R0
   8285           + mov.l @-Rm,R0
   8286           + mov.b R0,@Rn+
   8287           + mov.w R0,@Rn+
   8288           + mov.l R0,@Rn+
   8289 
   8290   [43]SPARC
   8291 
   8292      * The SPARC port now uses LRA by default.
   8293      * Support for the new Subtract-Extended-with-Carry instruction
   8294        available in SPARC M7 (Niagara 7) has been added.
   8295 
   8296 [44]Operating Systems
   8297 
   8298   [45]AIX
   8299 
   8300      * Visibility support has been enabled for AIX 7.1 and above.
   8301 
   8302   [46]Fuchsia
   8303 
   8304      * Support has been added for the [47]Fuchsia OS.
   8305 
   8306   [48]RTEMS
   8307 
   8308      * The ABI changes on ARM so that no short enums are used by default.
   8309 
   8310 Other significant improvements
   8311 
   8312      * -fverbose-asm previously emitted information on the meanings of
   8313        assembly expressions. This has been extended so that it now also
   8314        prints comments showing the source lines that correspond to the
   8315        assembly, making it easier to read the generated assembly
   8316        (especially with larger functions). For example, given this C
   8317        source file:
   8318 
   8319 int test (int n)
   8320 {
   8321   int i;
   8322   int total = 0;
   8323 
   8324   for (i = 0; i < n; i++)
   8325     total += i * i;
   8326   return total;
   8327 }
   8328 
   8329        -fverbose-asm now gives output similar to this for the function
   8330        body (when compiling for x86_64, with -Os):
   8331 
   8332        .text
   8333        .globl  test
   8334        .type   test, @@function
   8335 test:
   8336 .LFB0:
   8337        .cfi_startproc
   8338 # example.c:4:   int total = 0;
   8339        xorl    %eax, %eax      # <retval>
   8340 # example.c:6:   for (i = 0; i < n; i++)
   8341        xorl    %edx, %edx      # i
   8342 .L2:
   8343 # example.c:6:   for (i = 0; i < n; i++)
   8344        cmpl    %edi, %edx      # n, i
   8345        jge     .L5     #,
   8346 # example.c:7:     total += i * i;
   8347        movl    %edx, %ecx      # i, tmp92
   8348        imull   %edx, %ecx      # i, tmp92
   8349 # example.c:6:   for (i = 0; i < n; i++)
   8350        incl    %edx    # i
   8351 # example.c:7:     total += i * i;
   8352        addl    %ecx, %eax      # tmp92, <retval>
   8353        jmp     .L2     #
   8354 .L5:
   8355 # example.c:10: }
   8356        ret
   8357        .cfi_endproc
   8358 
   8359      * Two new options have been added for printing fix-it hints:
   8360           + -fdiagnostics-parseable-fixits allows for fix-it hints to be
   8361             emitted in a machine-readable form, suitable for consumption
   8362             by IDEs. For example, given:
   8363 
   8364 spellcheck-fields.cc:52:13: error: 'struct s' has no member named 'colour'; did
   8365 you mean 'color'?
   8366    return ptr->colour;
   8367                ^~~~~~
   8368                color
   8369 
   8370             it will emit:
   8371 
   8372 fix-it:"spellcheck-fields.cc":{52:13-52:19}:"color"
   8373 
   8374           + -fdiagnostics-generate-patch will print a patch in "unified"
   8375             format after any diagnostics are printed, showing the result
   8376             of applying all fix-it hints. For the above example it would
   8377             emit:
   8378 
   8379 --- spellcheck-fields.cc
   8380 +++ spellcheck-fields.cc
   8381 @@ -49,5 +49,5 @@
   8382 
   8383  color get_color(struct s *ptr)
   8384  {
   8385 -  return ptr->colour;
   8386 +  return ptr->color;
   8387  }
   8388 
   8389      * The gcc and g++ driver programs will now provide suggestions for
   8390        misspelled arguments to command-line options.
   8391 
   8392 $ gcc -c test.c -ftls-model=global-dinamic
   8393 gcc: error: unknown TLS model 'global-dinamic'
   8394 gcc: note: valid arguments to '-ftls-model=' are: global-dynamic initial-exec lo
   8395 cal-dynamic local-exec; did you mean 'global-dynamic'?
   8396 
   8397      * The compiler will now provide suggestions for misspelled
   8398        parameters.
   8399 
   8400 $ gcc -c test.c --param max-early-inliner-iteration=3
   8401 cc1: error: invalid --param name 'max-early-inliner-iteration'; did you mean 'ma
   8402 x-early-inliner-iterations'?
   8403 
   8404      * Profile-guided optimization (PGO) instrumentation, as well as test
   8405        coverage (GCOV), can newly instrument constructors (functions marks
   8406        with __attribute__((constructor))), destructors and C++
   8407        constructors (and destructors) of classes that are used as the type
   8408        of a global variable.
   8409      * A new option -fprofile-update=atomic prevents creation of corrupted
   8410        profiles created during an instrumentation run (-fprofile=generate)
   8411        of an application. The downside of the option is a speed penalty.
   8412        Providing -pthread on the command line selects atomic profile
   8413        updating (when supported by the target).
   8414      * GCC's already extensive testsuite has gained some new capabilities,
   8415        to further improve the reliability of the compiler:
   8416           + GCC now has an internal unit-testing API and a suite of tests
   8417             for programmatic self-testing of subsystems.
   8418           + GCC's C front end has been extended so that it can parse dumps
   8419             of GCC's internal representations, allowing for DejaGnu tests
   8420             that more directly exercise specific optimization passes. This
   8421             covers both the [49]GIMPLE representation (for testing
   8422             higher-level optimizations) and the [50]RTL representation,
   8423             allowing for more direct testing of lower-level details, such
   8424             as register allocation and instruction selection.
   8425 
   8426 [51]GCC 7.1
   8427 
   8428    This is the [52]list of problem reports (PRs) from GCC's bug tracking
   8429    system that are known to be fixed in the 7.1 release. This list might
   8430    not be complete (that is, it is possible that some PRs that have been
   8431    fixed are not listed here).
   8432 
   8433 [53]GCC 7.2
   8434 
   8435    This is the [54]list of problem reports (PRs) from GCC's bug tracking
   8436    system that are known to be fixed in the 7.2 release. This list might
   8437    not be complete (that is, it is possible that some PRs that have been
   8438    fixed are not listed here).
   8439 
   8440   Target Specific Changes
   8441 
   8442     SPARC
   8443 
   8444      * Support for the SPARC M8 processor has been added.
   8445      * The switches -mfix-ut700 and -mfix-gr712rc have been added to work
   8446        around an erratum in LEON3FT processors.
   8447      * Use of the Floating-point Multiply Single to Double (FsMULd)
   8448        instruction can now be controlled by the -mfsmuld and -fno-fsmuld
   8449        options.
   8450 
   8451   Operating Systems
   8452 
   8453     RTEMS
   8454 
   8455      * The Ada run-time support uses now thread-local storage (TLS).
   8456      * Support for RISC-V has been added.
   8457      * Support for 64-bit PowerPC using the ELFv2 ABI with 64-bit long
   8458        double has been added.
   8459 
   8460 [55]GCC 7.3
   8461 
   8462    This is the [56]list of problem reports (PRs) from GCC's bug tracking
   8463    system that are known to be fixed in the 7.3 release. This list might
   8464    not be complete (that is, it is possible that some PRs that have been
   8465    fixed are not listed here).
   8466 
   8467   Target Specific Changes
   8468 
   8469     SPARC
   8470 
   8471      * Workarounds for the four [57]LEON3FT errata GRLIB-TN-0010..0013
   8472        have been added. Relevant errata are activated by the target
   8473        specific -mfix-ut699, -mfix-ut700 and -mfix-gr712rc switches.
   8474 
   8475   Operating Systems
   8476 
   8477     RTEMS
   8478 
   8479      * Support has been added for Epiphany target.
   8480 
   8481 [58]GCC 7.4
   8482 
   8483    This is the [59]list of problem reports (PRs) from GCC's bug tracking
   8484    system that are known to be fixed in the 7.4 release. This list might
   8485    not be complete (that is, it is possible that some PRs that have been
   8486    fixed are not listed here).
   8487 
   8488 [60]GCC 7.5
   8489 
   8490    This is the [61]list of problem reports (PRs) from GCC's bug tracking
   8491    system that are known to be fixed in the 7.5 release. This list might
   8492    not be complete (that is, it is possible that some PRs that have been
   8493    fixed are not listed here).
   8494 
   8495 
   8496     For questions related to the use of GCC, please consult these web
   8497     pages and the [62]GCC manuals. If that fails, the
   8498     [63]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   8499     web pages and the development of GCC are welcome on our developer
   8500     list at [64]gcc (a] gcc.gnu.org. All of [65]our lists have public
   8501     archives.
   8502 
   8503    Copyright (C) [66]Free Software Foundation, Inc. Verbatim copying and
   8504    distribution of this entire article is permitted in any medium,
   8505    provided this notice is preserved.
   8506 
   8507    These pages are [67]maintained by the GCC team. Last modified
   8508    2025-01-31.
   8509 
   8510 References
   8511 
   8512    1. https://gcc.gnu.org/gcc-7/porting_to.html
   8513    2. https://gcc.gnu.org/onlinedocs/index.html#current
   8514    3. https://gcc.gnu.org/wiki/LRAIsDefault
   8515    4. https://gcc.gnu.org/onlinedocs/gcc-7.1.0/libstdc++/manual/manual/profile_mode.html
   8516    5. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77728
   8517    6. https://gcc.gnu.org/gcc-7/changes.html#general
   8518    7. https://gcc.gnu.org/gcc-7/changes.html#languages
   8519    8. https://gcc.gnu.org/wiki/OpenACC
   8520    9. https://gcc.gnu.org/wiki/Offloading
   8521   10. https://gcc.gnu.org/gcc-7/changes.html#ada
   8522   11. https://gcc.gnu.org/gcc-7/changes.html#brig
   8523   12. https://gcc.gnu.org/gcc-7/changes.html#c-family
   8524   13. https://gcc.gnu.org/onlinedocs/gcc-7.1.0/gcc/Object-Size-Checking.html
   8525   14. https://gcc.gnu.org/gcc-7/changes.html#c
   8526   15. https://gcc.gnu.org/gcc-7/changes.html#cxx
   8527   16. https://gcc.gnu.org/projects/cxx-status.html#cxx1z
   8528   17. https://wg21.link/p0136
   8529   18. https://gcc.gnu.org/gcc-7/changes.html#libstdcxx
   8530   19. https://gcc.gnu.org/onlinedocs/gcc-7.1.0/libstdc++/manual/using_dual_abi.html
   8531   20. https://gcc.gnu.org/gcc-7/changes.html#fortran
   8532   21. https://www.openmp.org/specifications/
   8533   22. https://gcc.gnu.org/gcc-7/changes.html#go
   8534   23. https://gcc.gnu.org/gcc-7/changes.html#java
   8535   24. https://gcc.gnu.org/gcc-7/changes.html#jit
   8536   25. https://gcc.gnu.org/onlinedocs/gcc-7.1.0/jit/topics/expressions.html#gcc_jit_rvalue_set_bool_require_tail_call
   8537   26. https://gcc.gnu.org/gcc-7/changes.html#targets
   8538   27. https://gcc.gnu.org/gcc-7/changes.html#aarch64
   8539   28. https://gcc.gnu.org/onlinedocs/gcc-7.1.0/gcc/AArch64-Options.html#AArch64-Options
   8540   29. https://gcc.gnu.org/gcc-7/changes.html#arc
   8541   30. https://gcc.gnu.org/gcc-7/changes.html#arm
   8542   31. https://gcc.gnu.org/install/configure.html
   8543   32. https://gcc.gnu.org/gcc-7/changes.html#avr
   8544   33. https://gcc.gnu.org/onlinedocs/gcc-7.1.0/gcc/AVR-Variable-Attributes.html
   8545   34. https://gcc.gnu.org/onlinedocs/gcc-7.1.0/gcc/AVR-Built-in-Functions.html
   8546   35. https://gcc.gnu.org/gcc-7/changes.html#x86
   8547   36. https://gcc.gnu.org/gcc-7/changes.html#nvptx
   8548   37. https://gcc.gnu.org/wiki/Offloading
   8549   38. https://gcc.gnu.org/gcc-7/changes.html#powerpc
   8550   39. https://gcc.gnu.org/gcc-7/changes.html#s390
   8551   40. https://gcc.gnu.org/gcc-7/changes.html#riscv
   8552   41. https://gcc.gnu.org/gcc-7/changes.html#rx
   8553   42. https://gcc.gnu.org/gcc-7/changes.html#sh
   8554   43. https://gcc.gnu.org/gcc-7/changes.html#sparc
   8555   44. https://gcc.gnu.org/gcc-7/changes.html#os
   8556   45. https://gcc.gnu.org/gcc-7/changes.html#aix
   8557   46. https://gcc.gnu.org/gcc-7/changes.html#fuchsia
   8558   47. https://fuchsia.googlesource.com/
   8559   48. https://gcc.gnu.org/gcc-7/changes.html#rtems
   8560   49. https://gcc.gnu.org/onlinedocs/gcc-7.1.0/gccint/GIMPLE-Tests.html
   8561   50. https://gcc.gnu.org/onlinedocs/gcc-7.1.0/gccint/RTL-Tests.html
   8562   51. https://gcc.gnu.org/gcc-7/changes.html#GCC7.1
   8563   52. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=7.0
   8564   53. https://gcc.gnu.org/gcc-7/changes.html#GCC7.2
   8565   54. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=7.2
   8566   55. https://gcc.gnu.org/gcc-7/changes.html#GCC7.3
   8567   56. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=7.3
   8568   57. https://www.gaisler.com/app-notes-tech-notes-and-white-papers
   8569   58. https://gcc.gnu.org/gcc-7/changes.html#GCC7.4
   8570   59. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=7.4
   8571   60. https://gcc.gnu.org/gcc-7/changes.html#GCC7.5
   8572   61. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=7.5
   8573   62. https://gcc.gnu.org/onlinedocs/
   8574   63. mailto:gcc-help (a] gcc.gnu.org
   8575   64. mailto:gcc (a] gcc.gnu.org
   8576   65. https://gcc.gnu.org/lists.html
   8577   66. https://www.fsf.org/
   8578   67. https://gcc.gnu.org/about.html
   8579 ======================================================================
   8580 http://gcc.gnu.org/gcc-6/index.html
   8581 
   8582                               GCC 6 Release Series
   8583 
   8584    (This release series is no longer supported.)
   8585 
   8586    October 26, 2018
   8587 
   8588    The [1]GNU project and the GCC developers are pleased to announce the
   8589    release of GCC 6.5.
   8590 
   8591    This release is a bug-fix release, containing fixes for regressions in
   8592    GCC 6.4 relative to previous releases of GCC.
   8593 
   8594 Release History
   8595 
   8596    GCC 6.5
   8597           October 26, 2018 ([2]changes, [3]documentation)
   8598 
   8599    GCC 6.4
   8600           July 4, 2017 ([4]changes, [5]documentation)
   8601 
   8602    GCC 6.3
   8603           December 21, 2016 ([6]changes, [7]documentation)
   8604 
   8605    GCC 6.2
   8606           August 22, 2016 ([8]changes, [9]documentation)
   8607 
   8608    GCC 6.1
   8609           April 27, 2016 ([10]changes, [11]documentation)
   8610 
   8611 References and Acknowledgements
   8612 
   8613    GCC used to stand for the GNU C Compiler, but since the compiler
   8614    supports several other languages aside from C, it now stands for the
   8615    GNU Compiler Collection.
   8616 
   8617    A list of [12]successful builds is updated as new information becomes
   8618    available.
   8619 
   8620    The GCC developers would like to thank the numerous people that have
   8621    contributed new features, improvements, bug fixes, and other changes as
   8622    well as test results to GCC. This [13]amazing group of volunteers is
   8623    what makes GCC successful.
   8624 
   8625    For additional information about GCC please refer to the [14]GCC
   8626    project web site or contact the [15]GCC development mailing list.
   8627 
   8628    To obtain GCC please use [16]our mirror sites or [17]our version
   8629    control system.
   8630 
   8631 
   8632     For questions related to the use of GCC, please consult these web
   8633     pages and the [18]GCC manuals. If that fails, the
   8634     [19]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   8635     web pages and the development of GCC are welcome on our developer
   8636     list at [20]gcc (a] gcc.gnu.org. All of [21]our lists have public
   8637     archives.
   8638 
   8639    Copyright (C) [22]Free Software Foundation, Inc. Verbatim copying and
   8640    distribution of this entire article is permitted in any medium,
   8641    provided this notice is preserved.
   8642 
   8643    These pages are [23]maintained by the GCC team. Last modified
   8644    2024-05-30.
   8645 
   8646 References
   8647 
   8648    1. http://www.gnu.org/
   8649    2. https://gcc.gnu.org/gcc-6/changes.html
   8650    3. https://gcc.gnu.org/onlinedocs/6.5.0/
   8651    4. https://gcc.gnu.org/gcc-6/changes.html
   8652    5. https://gcc.gnu.org/onlinedocs/6.4.0/
   8653    6. https://gcc.gnu.org/gcc-6/changes.html
   8654    7. https://gcc.gnu.org/onlinedocs/6.3.0/
   8655    8. https://gcc.gnu.org/gcc-6/changes.html
   8656    9. https://gcc.gnu.org/onlinedocs/6.2.0/
   8657   10. https://gcc.gnu.org/gcc-6/changes.html
   8658   11. https://gcc.gnu.org/onlinedocs/6.1.0/
   8659   12. https://gcc.gnu.org/gcc-6/buildstat.html
   8660   13. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   8661   14. https://gcc.gnu.org/index.html
   8662   15. mailto:gcc (a] gcc.gnu.org
   8663   16. https://gcc.gnu.org/mirrors.html
   8664   17. https://gcc.gnu.org/git.html
   8665   18. https://gcc.gnu.org/onlinedocs/
   8666   19. mailto:gcc-help (a] gcc.gnu.org
   8667   20. mailto:gcc (a] gcc.gnu.org
   8668   21. https://gcc.gnu.org/lists.html
   8669   22. https://www.fsf.org/
   8670   23. https://gcc.gnu.org/about.html
   8671 ======================================================================
   8672 http://gcc.gnu.org/gcc-6/changes.html
   8673 
   8674                               GCC 6 Release Series
   8675                         Changes, New Features, and Fixes
   8676 
   8677    This page is a brief summary of some of the huge number of improvements
   8678    in GCC 6. For more information, see the [1]Porting to GCC 6 page and
   8679    the [2]full GCC documentation.
   8680 
   8681 Caveats
   8682 
   8683      * The default mode for C++ is now -std=gnu++14 instead of
   8684        -std=gnu++98.
   8685      * Support for a number of older systems and recently unmaintained or
   8686        untested target ports of GCC has been declared obsolete in GCC 6.
   8687        Unless there is activity to revive them, the next release of GCC
   8688        will have their sources permanently removed.
   8689        The following ports for individual systems on particular
   8690        architectures have been obsoleted:
   8691           + SH5 / SH64 (sh64-*-*) as announced [3]here.
   8692      * The AVR port requires binutils version 2.26.1 or later for the fix
   8693        for [4]PR71151 to work.
   8694      * The GCC 6.5 release has an accidental ABI incompatibility for
   8695        nested std::pair objects, for more details see [5]PR 87822. The bug
   8696        causes a layout change for pairs where the first member is also a
   8697        pair, e.g. std::pair<std::pair<X, Y>, Z>. The GCC 6 release series
   8698        is closed so the bug in GCC 6.5 will not be fixed upstream, but
   8699        there is a patch in the bug report to allow it to be fixed by
   8700        anybody packaging GCC 6.5 or installing it themselves.
   8701 
   8702 [6]General Optimizer Improvements
   8703 
   8704      * UndefinedBehaviorSanitizer gained a new sanitization option,
   8705        -fsanitize=bounds-strict, which enables strict checking of array
   8706        bounds. In particular, it enables -fsanitize=bounds as well as
   8707        instrumentation of flexible array member-like arrays.
   8708      * Type-based alias analysis now disambiguates accesses to different
   8709        pointers. This improves precision of the alias oracle by about
   8710        20-30% on higher-level C++ programs. Programs doing invalid type
   8711        punning of pointer types may now need -fno-strict-aliasing to work
   8712        correctly.
   8713      * Alias analysis now correctly supports the weakref and alias
   8714        attributes. This allows accessing both a variable and its alias in
   8715        one translation unit which is common with link-time optimization.
   8716      * Value range propagation now assumes that the this pointer in C++
   8717        member functions is non-null. This eliminates common null pointer
   8718        checks but also breaks some non-conforming code-bases (such as
   8719        Qt-5, Chromium, KDevelop). As a temporary work-around
   8720        -fno-delete-null-pointer-checks can be used. Wrong code can be
   8721        identified by using -fsanitize=undefined.
   8722      * Link-time optimization improvements:
   8723           + warning and error attributes are now correctly preserved by
   8724             declaration linking and thus -D_FORTIFY_SOURCE=2 is now
   8725             supported with -flto.
   8726           + Type merging was fixed to handle C and Fortran
   8727             interoperability rules as defined by the Fortran 2008 language
   8728             standard.
   8729             As an exception, CHARACTER(KIND=C_CHAR) is not inter-operable
   8730             with char in all cases because it is an array while char is
   8731             scalar. INTEGER(KIND=C_SIGNED_CHAR) should be used instead. In
   8732             general, this inter-operability cannot be implemented, for
   8733             example on targets where the argument passing convention for
   8734             arrays differs from scalars.
   8735           + More type information is now preserved at link time, reducing
   8736             the loss of accuracy of the type-based alias analysis compared
   8737             to builds without link-time optimization.
   8738           + Invalid type punning on global variables and declarations is
   8739             now reported with -Wodr-type-mismatch.
   8740           + The size of LTO object files was reduced by about 11%
   8741             (measured by compiling Firefox 46.0).
   8742           + Link-time parallelization (enabled using -flto=n) was
   8743             significantly improved by decreasing the size of streamed data
   8744             when partitioning programs. The size of streamed IL while
   8745             compiling Firefox 46.0 was reduced by 66%.
   8746           + The linker plugin was extended to pass information about the
   8747             type of binary produced to the GCC back end. (That can also be
   8748             controlled manually by -flinker-output.) This makes it
   8749             possible to properly configure the code generator and support
   8750             incremental linking. Incremental linking of LTO objects by gcc
   8751             -r is now supported for plugin-enabled setups.
   8752             There are two ways to perform incremental linking:
   8753               1. Linking by ld -r will result in an object file with all
   8754                  sections from individual object files mechanically
   8755                  merged. This delays the actual link-time optimization to
   8756                  the final linking step and thus permits whole program
   8757                  optimization. Linking the final binary with such object
   8758                  files is however slower.
   8759               2. Linking by gcc -r will lead to link-time optimization and
   8760                  emit the final binary into the object file. Linking such
   8761                  an object file is fast but avoids any benefits from whole
   8762                  program optimization.
   8763             GCC 7 will support incremental link-time optimization with gcc
   8764             -r.
   8765      * Inter-procedural optimization improvements:
   8766           + Basic jump threading is now performed before profile
   8767             construction and inline analysis, resulting in more realistic
   8768             size and time estimates that drive the heuristics of the
   8769             inliner and function cloning passes.
   8770           + Function cloning now more aggressively eliminates unused
   8771             function parameters.
   8772 
   8773 [7]New Languages and Language specific improvements
   8774 
   8775    Compared to GCC 5, the GCC 6 release series includes a much improved
   8776    implementation of the [8]OpenACC 2.0a specification. Highlights are:
   8777      * In addition to single-threaded host-fallback execution, offloading
   8778        is supported for nvptx (Nvidia GPUs) on x86_64 and PowerPC 64-bit
   8779        little-endian GNU/Linux host systems. For nvptx offloading, with
   8780        the OpenACC parallel construct, the execution model allows for an
   8781        arbitrary number of gangs, up to 32 workers, and 32 vectors.
   8782      * Initial support for parallelized execution of OpenACC kernels
   8783        constructs:
   8784           + Parallelization of a kernels region is switched on by
   8785             -fopenacc combined with -O2 or higher.
   8786           + Code is offloaded onto multiple gangs, but executes with just
   8787             one worker, and a vector length of 1.
   8788           + Directives inside a kernels region are not supported.
   8789           + Loops with reductions can be parallelized.
   8790           + Only kernels regions with one loop nest are parallelized.
   8791           + Only the outer-most loop of a loop nest can be parallelized.
   8792           + Loop nests containing sibling loops are not parallelized.
   8793        Typically, using the OpenACC parallel construct gives much better
   8794        performance, compared to the initial support of the OpenACC kernels
   8795        construct.
   8796      * The device_type clause is not supported. The bind and nohost
   8797        clauses are not supported. The host_data directive is not supported
   8798        in Fortran.
   8799      * Nested parallelism (cf. CUDA dynamic parallelism) is not supported.
   8800      * Usage of OpenACC constructs inside multithreaded contexts (such as
   8801        created by OpenMP, or pthread programming) is not supported.
   8802      * If a call to the acc_on_device function has a compile-time constant
   8803        argument, the function call evaluates to a compile-time constant
   8804        value only for C and C++ but not for Fortran.
   8805 
   8806    See the [9]OpenACC and [10]Offloading wiki pages for further
   8807    information.
   8808 
   8809   [11]C family
   8810 
   8811      * Version 4.5 of the [12]OpenMP specification is now supported in the
   8812        C and C++ compilers.
   8813      * The C and C++ compilers now support attributes on enumerators. For
   8814        instance, it is now possible to mark enumerators as deprecated:
   8815 
   8816 enum {
   8817   newval,
   8818   oldval __attribute__ ((deprecated ("too old")))
   8819 };
   8820 
   8821      * Source locations for the C and C++ compilers are now tracked as
   8822        ranges, rather than just points, making it easier to identify the
   8823        subexpression of interest within a complicated expression. For
   8824        example:
   8825 
   8826 test.cc: In function 'int test(int, int, foo, int, int)':
   8827 test.cc:5:16: error: no match for 'operator*' (operand types are 'int' and 'foo'
   8828 )
   8829    return p + q * r * s + t;
   8830               ~~^~~
   8831 
   8832        In addition, there is now initial support for precise diagnostic
   8833        locations within strings:
   8834 
   8835 format-strings.c:3:14: warning: field width specifier '*' expects a matching 'in
   8836 t' argument [-Wformat=]
   8837    printf("%*d");
   8838             ^
   8839 
   8840      * Diagnostics can now contain "fix-it hints", which are displayed in
   8841        context underneath the relevant source code. For example:
   8842 
   8843 fixits.c: In function 'bad_deref':
   8844 fixits.c:11:13: error: 'ptr' is a pointer; did you mean to use '->'?
   8845    return ptr.x;
   8846              ^
   8847              ->
   8848 
   8849      * The C and C++ compilers now offer suggestions for misspelled field
   8850        names:
   8851 
   8852 spellcheck-fields.cc:52:13: error: 'struct s' has no member named 'colour'; did
   8853 you mean 'color'?
   8854    return ptr->colour;
   8855                ^~~~~~
   8856 
   8857      * New command-line options have been added for the C and C++
   8858        compilers:
   8859           + -Wshift-negative-value warns about left shifting a negative
   8860             value.
   8861           + -Wshift-overflow warns about left shift overflows. This
   8862             warning is enabled by default. -Wshift-overflow=2 also warns
   8863             about left-shifting 1 into the sign bit.
   8864           + -Wtautological-compare warns if a self-comparison always
   8865             evaluates to true or false. This warning is enabled by -Wall.
   8866           + -Wnull-dereference warns if the compiler detects paths that
   8867             trigger erroneous or undefined behavior due to dereferencing a
   8868             null pointer. This option is only active when
   8869             -fdelete-null-pointer-checks is active, which is enabled by
   8870             optimizations in most targets. The precision of the warnings
   8871             depends on the optimization options used.
   8872           + -Wduplicated-cond warns about duplicated conditions in an
   8873             if-else-if chain.
   8874           + -Wmisleading-indentation warns about places where the
   8875             indentation of the code gives a misleading idea of the block
   8876             structure of the code to a human reader. For example, given
   8877             [13]CVE-2014-1266:
   8878 
   8879 sslKeyExchange.c: In function 'SSLVerifySignedServerKeyExchange':
   8880 sslKeyExchange.c:629:3: warning: this 'if' clause does not guard... [-Wmisleadin
   8881 g-indentation]
   8882     if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0)
   8883     ^~
   8884 sslKeyExchange.c:631:5: note: ...this statement, but the latter is misleadingly
   8885 indented as if it is guarded by the 'if'
   8886         goto fail;
   8887         ^~~~
   8888 
   8889             This warning is enabled by -Wall.
   8890      * The C and C++ compilers now emit saner error messages if
   8891        merge-conflict markers are present in a source file.
   8892 
   8893 test.c:3:1: error: version control conflict marker in file
   8894  <<<<<<< HEAD
   8895  ^~~~~~~
   8896 
   8897   [14]C
   8898 
   8899      * It is possible to disable warnings when an initialized field of a
   8900        structure or a union with side effects is being overridden when
   8901        using designated initializers via a new warning option
   8902        -Woverride-init-side-effects.
   8903      * A new type attribute scalar_storage_order applying to structures
   8904        and unions has been introduced. It specifies the storage order (aka
   8905        endianness) in memory of scalar fields in structures or unions.
   8906 
   8907   [15]C++
   8908 
   8909      * The default mode has been changed to -std=gnu++14.
   8910      * [16]C++ Concepts are now supported when compiling with -fconcepts.
   8911      * -flifetime-dse is more aggressive in dead-store elimination in
   8912        situations where a memory store to a location precedes a
   8913        constructor to that memory location.
   8914      * G++ now supports [17]C++17 fold expressions, u8 character literals,
   8915        extended static_assert, and nested namespace definitions.
   8916      * G++ now allows constant evaluation for all non-type template
   8917        arguments.
   8918      * G++ now supports C++ Transactional Memory when compiling with
   8919        -fgnu-tm.
   8920 
   8921     [18]Runtime Library (libstdc++)
   8922 
   8923      * Extensions to the C++ Library to support mathematical special
   8924        functions (ISO/IEC 29124:2010), thanks to Edward Smith-Rowland.
   8925      * Experimental support for C++17, including the following new
   8926        features:
   8927           + std::uncaught_exceptions function (this is also available for
   8928             -std=gnu++NN modes);
   8929           + new member functions try_emplace and insert_or_assign for
   8930             unique_key maps;
   8931           + non-member functions std::size, std::empty, and std::data for
   8932             accessing containers and arrays;
   8933           + std::invoke;
   8934           + std::shared_mutex;
   8935           + std::void_t and std::bool_constant metaprogramming utilities.
   8936        Thanks to Ville Voutilainen for contributing many of the C++17
   8937        features.
   8938      * An experimental implementation of the File System TS.
   8939      * Experimental support for most features of the second version of the
   8940        Library Fundamentals TS. This includes polymorphic memory resources
   8941        and array support in shared_ptr, thanks to Fan You.
   8942      * Some assertions checked by Debug Mode can now also be enabled by
   8943        _GLIBCXX_ASSERTIONS. The subset of checks enabled by the new macro
   8944        have less run-time overhead than the full _GLIBCXX_DEBUG checks and
   8945        don't affect the library ABI, so can be enabled per-translation
   8946        unit.
   8947      * Timed mutex types are supported on more targets, including Darwin.
   8948      * Improved std::locale support for DragonFly and FreeBSD, thanks to
   8949        John Marino and Andreas Tobler.
   8950 
   8951   [19]Fortran
   8952 
   8953      * Fortran 2008 SUBMODULE support.
   8954      * Fortran 2015 EVENT_TYPE, EVENT_POST, EVENT_WAIT, and EVENT_QUERY
   8955        support.
   8956      * Improved support for Fortran 2003 deferred-length character
   8957        variables.
   8958      * Improved support for OpenMP and OpenACC.
   8959      * The MATMUL intrinsic is now inlined for straightforward cases if
   8960        front-end optimization is active. The maximum size for inlining can
   8961        be set to n with the -finline-matmul-limit=n option and turned off
   8962        with -finline-matmul-limit=0.
   8963      * The -Wconversion-extra option will warn about REAL constants which
   8964        have excess precision for their kind.
   8965      * The -Winteger-division option has been added, which warns about
   8966        divisions of integer constants which are truncated. This option is
   8967        included in -Wall by default.
   8968 
   8969 [20]libgccjit
   8970 
   8971      * The driver code is now run in-process within libgccjit, providing a
   8972        small speed-up of the compilation process.
   8973      * The API has gained entrypoints for
   8974           + [21]timing how long was spent in different parts of code,
   8975           + [22]creating switch statements,
   8976           + [23]allowing unreachable basic blocks in a function, and
   8977           + [24]adding arbitrary command-line options to a compilation.
   8978 
   8979 [25]New Targets and Target Specific Improvements
   8980 
   8981   [26]AArch64
   8982 
   8983      * A number of AArch64-specific options have been added. The most
   8984        important ones are summarised in this section; for more detailed
   8985        information please refer to the documentation.
   8986      * The command-line options -march=native, -mcpu=native and
   8987        -mtune=native are now available on native AArch64 GNU/Linux
   8988        systems. Specifying these options causes GCC to auto-detect the
   8989        host CPU and choose the optimal setting for that system.
   8990      * -fpic is now supported when generating code for the small code
   8991        model (-mcmodel=small). The size of the global offset table (GOT)
   8992        is limited to 28KiB under the LP64 SysV ABI, and 15KiB under the
   8993        ILP32 SysV ABI.
   8994      * The AArch64 port now supports target attributes and pragmas. Please
   8995        refer to the [27]documentation for details of available attributes
   8996        and pragmas as well as usage instructions.
   8997      * Link-time optimization across translation units with different
   8998        target-specific options is now supported.
   8999      * The option -mtls-size= is now supported. It can be used to specify
   9000        the bit size of TLS offsets, allowing GCC to generate better TLS
   9001        instruction sequences.
   9002      * The option -fno-plt is now fully functional.
   9003      * The ARMv8.1-A architecture and the Large System Extensions are now
   9004        supported. They can be used by specifying the -march=armv8.1-a
   9005        option. Additionally, the +lse option extension can be used in a
   9006        similar fashion to other option extensions. The Large System
   9007        Extensions introduce new instructions that are used in the
   9008        implementation of atomic operations.
   9009      * The ACLE half-precision floating-point type __fp16 is now supported
   9010        in the C and C++ languages.
   9011      * The ARM Cortex-A35 processor is now supported via the
   9012        -mcpu=cortex-a35 and -mtune=cortex-a35 options as well as the
   9013        equivalent target attributes and pragmas.
   9014      * The Qualcomm QDF24xx processor is now supported via the
   9015        -mcpu=qdf24xx and -mtune=qdf24xx options as well as the equivalent
   9016        target attributes and pragmas.
   9017      * Code generation for the ARM Cortex-A57 processor is improved. Among
   9018        general code generation improvements, a better algorithm is added
   9019        for allocating registers to floating-point multiply-accumulate
   9020        instructions offering increased performance when compiling with
   9021        -mcpu=cortex-a57 or -mtune=cortex-a57.
   9022      * Code generation for the ARM Cortex-A53 processor is improved. A
   9023        more accurate instruction scheduling model for the processor is now
   9024        used, and a number of compiler tuning parameters have been set to
   9025        offer increased performance when compiling with -mcpu=cortex-a53 or
   9026        -mtune=cortex-a53.
   9027      * Code generation for the Samsung Exynos M1 processor is improved. A
   9028        more accurate instruction scheduling model for the processor is now
   9029        used, and a number of compiler tuning parameters have been set to
   9030        offer increased performance when compiling with -mcpu=exynos-m1 or
   9031        -mtune=exynos-m1.
   9032      * Improvements in the generation of conditional branches and literal
   9033        pools allow the compiler to compile functions of a large size.
   9034        Constant pools are now placed into separate rodata sections. The
   9035        new option -mpc-relative-literal-loads generates per-function
   9036        literal pools, limiting the maximum size of functions to 1MiB.
   9037      * Several correctness issues generating Advanced SIMD instructions
   9038        for big-endian targets have been fixed resulting in improved code
   9039        generation for ACLE intrinsics with -mbig-endian.
   9040 
   9041   [28]ARM
   9042 
   9043      * Support for revisions of the ARM architecture prior to ARMv4t has
   9044        been deprecated and will be removed in a future GCC release. The
   9045        -mcpu and -mtune values that are deprecated are: arm2, arm250,
   9046        arm3, arm6, arm60, arm600, arm610, arm620, arm7, arm7d, arm7di,
   9047        arm70, arm700, arm700i, arm710, arm720, arm710c, arm7100, arm7500,
   9048        arm7500fe, arm7m, arm7dm, arm7dmi, arm8, arm810, strongarm,
   9049        strongarm110, strongarm1100, strongarm1110, fa526, fa626. The value
   9050        arm7tdmi is still supported. The values of -march that are
   9051        deprecated are: armv2,armv2a,armv3,armv3m,armv4.
   9052      * The ARM port now supports target attributes and pragmas. Please
   9053        refer to the [29]documentation for details of available attributes
   9054        and pragmas as well as usage instructions.
   9055      * Support has been added for the following processors (GCC
   9056        identifiers in parentheses): ARM Cortex-A32 (cortex-a32), ARM
   9057        Cortex-A35 (cortex-a35) and ARM Cortex-R8 (cortex-r8). The GCC
   9058        identifiers can be used as arguments to the -mcpu or -mtune
   9059        options, for example: -mcpu=cortex-a32 or -mtune=cortex-a35.
   9060 
   9061   [30]Heterogeneous Systems Architecture
   9062 
   9063      * GCC can now generate HSAIL (Heterogeneous System Architecture
   9064        Intermediate Language) for simple OpenMP device constructs if
   9065        configured with --enable-offload-targets=hsa. A new libgomp plugin
   9066        then runs the HSA GPU kernels implementing these constructs on HSA
   9067        capable GPUs via a standard HSA run time.
   9068        If the HSA compilation back end determines it cannot output HSAIL
   9069        for a particular input, it gives a warning by default. These
   9070        warnings can be suppressed with -Wno-hsa. To give a few examples,
   9071        the HSA back end does not implement compilation of code using
   9072        function pointers, automatic allocation of variable sized arrays,
   9073        functions with variadic arguments as well as a number of other less
   9074        common programming constructs.
   9075        When compilation for HSA is enabled, the compiler attempts to
   9076        compile composite OpenMP constructs
   9077 
   9078 #pragma omp target teams distribute parallel for
   9079 
   9080        into parallel HSA GPU kernels.
   9081 
   9082   [31]IA-32/x86-64
   9083 
   9084      * GCC now supports the Intel CPU named Skylake with AVX-512
   9085        extensions through -march=skylake-avx512. The switch enables the
   9086        following ISA extensions: AVX-512F, AVX512VL, AVX-512CD, AVX-512BW,
   9087        AVX-512DQ.
   9088      * Support for new AMD instructions monitorx and mwaitx has been
   9089        added. This includes new intrinsic and built-in support. It is
   9090        enabled through option -mmwaitx. The instructions monitorx and
   9091        mwaitx implement the same functionality as the old monitor and
   9092        mwait instructions. In addition, mwaitx adds a configurable timer.
   9093        The timer value is received as third argument and stored in
   9094        register %ebx.
   9095      * x86-64 targets now allow stack realignment from a word-aligned
   9096        stack pointer using the command-line option -mstackrealign or
   9097        __attribute__ ((force_align_arg_pointer)). This allows functions
   9098        compiled with a vector-aligned stack to be invoked from objects
   9099        that keep only word-alignment.
   9100      * Support for address spaces __seg_fs, __seg_gs, and __seg_tls. These
   9101        can be used to access data via the %fs and %gs segments without
   9102        having to resort to inline assembly. Please refer to the
   9103        [32]documentation for usage instructions.
   9104      * Support for AMD Zen (family 17h) processors is now available
   9105        through the -march=znver1 and -mtune=znver1 options.
   9106 
   9107   [33]MeP
   9108 
   9109      * Support for the MeP (mep-elf) architecture has been deprecated and
   9110        will be removed in a future GCC release.
   9111 
   9112   [34]MSP430
   9113 
   9114      * The MSP430 compiler now has the ability to automatically distribute
   9115        code and data between low memory (addresses below 64K) and high
   9116        memory. This only applies to parts that actually have both memory
   9117        regions and only if the linker script for the part has been
   9118        specifically set up to support this feature.
   9119        A new attribute of either can be applied to both functions and
   9120        data, and this tells the compiler to place the object into low
   9121        memory if there is room and into high memory otherwise. Two other
   9122        new attributes - lower and upper - can be used to explicitly state
   9123        that an object should be placed in the specified memory region. If
   9124        there is not enough left in that region the compilation will fail.
   9125        Two new command-line options - -mcode-region=[lower|upper|either]
   9126        and -mdata-region=[lower|upper|either] - can be used to tell the
   9127        compiler what to do with objects that do not have one of these new
   9128        attributes.
   9129 
   9130   [35]PowerPC / PowerPC64 / RS6000
   9131 
   9132      * PowerPC64 now supports IEEE 128-bit floating-point using the
   9133        __float128 data type. In GCC 6, this is not enabled by default, but
   9134        you can enable it with -mfloat128. The IEEE 128-bit floating-point
   9135        support requires the use of the VSX instruction set. IEEE 128-bit
   9136        floating-point values are passed and returned as a single vector
   9137        value. The software emulator for IEEE 128-bit floating-point
   9138        support is only built on PowerPC GNU/Linux systems where the
   9139        default CPU is at least power7. On future ISA 3.0 systems (POWER 9
   9140        and later), you will be able to use the -mfloat128-hardware option
   9141        to use the ISA 3.0 instructions that support IEEE 128-bit
   9142        floating-point. An additional type (__ibm128) has been added to
   9143        refer to the IBM extended double type that normally implements long
   9144        double. This will allow for a future transition to implementing
   9145        long double with IEEE 128-bit floating-point.
   9146      * Basic support has been added for POWER9 hardware that will use the
   9147        recently published OpenPOWER ISA 3.0 instructions. The following
   9148        new switches are available:
   9149           + -mcpu=power9: Implement all of the ISA 3.0 instructions
   9150             supported by the compiler.
   9151           + -mtune=power9: In the future, apply tuning for POWER9 systems.
   9152             Currently, POWER8 tunings are used.
   9153           + -mmodulo: Generate code using the ISA 3.0 integer instructions
   9154             (modulus, count trailing zeros, array index support, integer
   9155             multiply/add).
   9156           + -mpower9-fusion: Generate code to suitably fuse instruction
   9157             sequences for a POWER9 system.
   9158           + -mpower9-dform: Generate code to use the new D-form
   9159             (register+offset) memory instructions for the vector
   9160             registers.
   9161           + -mpower9-vector: Generate code using the new ISA 3.0 vector
   9162             (VSX or Altivec) instructions.
   9163           + -mpower9-minmax: Reserved for future development.
   9164           + -mtoc-fusion: Keep TOC entries together to provide more fusion
   9165             opportunities.
   9166      * New constraints have been added to support IEEE 128-bit
   9167        floating-point and ISA 3.0 instructions:
   9168           + wb: Altivec register if -mpower9-dform is enabled.
   9169           + we: VSX register if -mpower9-vector is enabled for 64-bit code
   9170             generation.
   9171           + wo: VSX register if -mpower9-vector is enabled.
   9172           + wp: Reserved for future use if long double is implemented with
   9173             IEEE 128-bit floating-point instead of IBM extended double.
   9174           + wq: VSX register if -mfloat128 is enabled.
   9175           + wF: Memory operand suitable for POWER9 fusion load/store.
   9176           + wG: Memory operand suitable for TOC fusion memory references.
   9177           + wL: Integer constant identifying the element number mfvsrld
   9178             accesses within a vector.
   9179      * Support has been added for __builtin_cpu_is() and
   9180        __builtin_cpu_supports(), allowing for very fast access to
   9181        AT_PLATFORM, AT_HWCAP, and AT_HWCAP2 values. This requires use of
   9182        glibc 2.23 or later.
   9183      * All hardware transactional memory builtins now correctly behave as
   9184        memory barriers. Programmers can use #ifdef __TM_FENCE__ to
   9185        determine whether their "old" compiler treats the builtins as
   9186        barriers.
   9187      * Split-stack support has been added for gccgo on PowerPC64 for both
   9188        big- and little-endian (but not for 32-bit). The gold linker from
   9189        at least binutils 2.25.1 must be available in the PATH when
   9190        configuring and building gccgo to enable split stack. (The
   9191        requirement for binutils 2.25.1 applies to PowerPC64 only.) The
   9192        split-stack feature allows a small initial stack size to be
   9193        allocated for each goroutine, which increases as needed.
   9194      * GCC on PowerPC now supports the standard lround function.
   9195      * A new configuration option ---with-advance-toolchain=at was added
   9196        for PowerPC 64-bit GNU/Linux systems to use the header files,
   9197        library files, and the dynamic linker from a specific Advance
   9198        Toolchain release instead of the default versions that are provided
   9199        by the GNU/Linux distribution. In general, this option is intended
   9200        for the developers of GCC, and it is not intended for general use.
   9201      * The "q", "S", "T", and "t" asm-constraints have been removed.
   9202      * The "b", "B", "m", "M", and "W" format modifiers have been removed.
   9203 
   9204   [36]S/390, System z, IBM z Systems
   9205 
   9206      * Support for the IBM z13 processor has been added. When using the
   9207        -march=z13 option, the compiler will generate code making use of
   9208        the new instructions and registers introduced with the vector
   9209        extension facility. The -mtune=z13 option enables z13 specific
   9210        instruction scheduling without making use of new instructions.
   9211        Compiling code with -march=z13 reduces the default alignment of
   9212        vector types bigger than 8 bytes to 8. This is an ABI change and
   9213        care must be taken when linking modules compiled with different
   9214        arch levels which interchange variables containing vector type
   9215        values. For newly compiled code the GNU linker will emit a warning.
   9216      * The -mzvector option enables a C/C++ language extension. This
   9217        extension provides a new keyword vector which can be used to define
   9218        vector type variables. (Note: This is not available when enforcing
   9219        strict standard compliance e.g. with -std=c99. Either enable GNU
   9220        extensions with e.g. -std=gnu99 or use __vector instead of vector.)
   9221        Additionally a set of overloaded builtins is provided which is
   9222        partially compatible to the PowerPC Altivec builtins. In order to
   9223        make use of these builtins the vecintrin.h header file needs to be
   9224        included.
   9225      * The new command-line options -march=native, and -mtune=native are
   9226        now available on native IBM z Systems. Specifying these options
   9227        causes GCC to auto-detect the host CPU and choose the optimal
   9228        setting for that system. If GCC is unable to detect the host CPU
   9229        these options have no effect.
   9230      * The IBM z Systems port now supports target attributes and pragmas.
   9231        Please refer to the [37]documentation for details of available
   9232        attributes and pragmas as well as usage instructions.
   9233      * -fsplit-stack is now supported as part of the IBM z Systems port.
   9234        This feature requires a recent gold linker to be used.
   9235      * Support for the g5 and g6 -march=/-mtune= CPU level switches has
   9236        been deprecated and will be removed in a future GCC release. -m31
   9237        from now on defaults to -march=z900 if not specified otherwise.
   9238        -march=native on a g5/g6 machine will default to -march=z900.
   9239 
   9240   [38]SH
   9241 
   9242      * Support for SH5 / SH64 has been declared obsolete and will be
   9243        removed in future releases.
   9244      * Support for the FDPIC ABI has been added. It can be enabled using
   9245        the new -mfdpic target option and --enable-fdpic configure option.
   9246 
   9247   [39]SPARC
   9248 
   9249      * An ABI bug has been fixed in 64-bit mode. Unfortunately, this
   9250        change will break binary compatibility with earlier releases for
   9251        code it affects, but this should be pretty rare in practice. The
   9252        conditions are: a 16-byte structure containing a double or a 8-byte
   9253        vector in the second half is passed to a subprogram in slot #15,
   9254        for example as 16th parameter if the first 15 ones have at most 8
   9255        bytes. The double or vector was wrongly passed in floating-point
   9256        register %d32 in lieu of on the stack as per the SPARC calling
   9257        conventions.
   9258 
   9259 [40]Operating Systems
   9260 
   9261   [41]AIX
   9262 
   9263      * DWARF debugging support for AIX 7.1 has been enabled as an optional
   9264        debugging format. A more recent Technology Level (TL) and GCC built
   9265        with that level are required for full exploitation of DWARF
   9266        debugging capabilities.
   9267 
   9268   [42]Linux
   9269 
   9270      * Support for the [43]musl C library was added for the AArch64, ARM,
   9271        MicroBlaze, MIPS, MIPS64, PowerPC, PowerPC64, SH, i386, x32 and
   9272        x86_64 targets. It can be selected using the new -mmusl option in
   9273        case musl is not the default libc. GCC defaults to musl libc if it
   9274        is built with a target triplet matching the *-linux-musl* pattern.
   9275 
   9276   [44]RTEMS
   9277 
   9278      * The RTEMS thread model implementation changed. Mutexes now use
   9279        self-contained objects defined in newlib <sys/lock.h> instead of
   9280        Classic API semaphores. The keys for thread specific data and the
   9281        once function are directly defined via <pthread.h>. Self-contained
   9282        condition variables are provided via newlib <sys/lock.h>. The RTEMS
   9283        thread model also supports C++11 threads.
   9284      * OpenMP support now uses self-contained objects provided by newlib
   9285        <sys/lock.h> and offers a significantly better performance compared
   9286        to the POSIX configuration of libgomp. It is possible to configure
   9287        thread pools for each scheduler instance via the environment
   9288        variable GOMP_RTEMS_THREAD_POOLS.
   9289 
   9290   [45]Solaris
   9291 
   9292      * Solaris 12 is now fully supported. Minimal support had already been
   9293        present in GCC 5.3.
   9294      * Solaris 12 provides a full set of startup files (crt1.o, crti.o,
   9295        crtn.o), which GCC now prefers over its own ones.
   9296      * Position independent executables (PIE) are now supported on Solaris
   9297        12.
   9298      * Constructor priority is now supported on Solaris 12 with the system
   9299        linker.
   9300      * libvtv has been ported to Solaris 11 and up.
   9301 
   9302   [46]Windows
   9303 
   9304      * The option -mstackrealign is now automatically activated in 32-bit
   9305        mode whenever the use of SSE instructions is requested.
   9306 
   9307 Other significant improvements
   9308 
   9309      * The gcc and g++ driver programs will now provide suggestions for
   9310        misspelled command-line options.
   9311 
   9312 $ gcc -static-libfortran test.f95
   9313 gcc: error: unrecognized command line option '-static-libfortran'; did you mean
   9314 '-static-libgfortran'?
   9315 
   9316      * The --enable-default-pie configure option enables generation of PIE
   9317        by default.
   9318 
   9319                                   [47]GCC 6.2
   9320 
   9321    This is the [48]list of problem reports (PRs) from GCC's bug tracking
   9322    system that are known to be fixed in the 6.2 release. This list might
   9323    not be complete (that is, it is possible that some PRs that have been
   9324    fixed are not listed here).
   9325 
   9326 Target Specific Changes
   9327 
   9328   SPARC
   9329 
   9330      * Support for --with-cpu-32 and --with-cpu-64 configure options has
   9331        been added on bi-architecture platforms.
   9332      * Support for the SPARC M7 (Niagara 7) processor has been added.
   9333      * Support for the VIS 4.0 instruction set has been added.
   9334 
   9335                                   [49]GCC 6.3
   9336 
   9337    This is the [50]list of problem reports (PRs) from GCC's bug tracking
   9338    system that are known to be fixed in the 6.3 release. This list might
   9339    not be complete (that is, it is possible that some PRs that have been
   9340    fixed are not listed here).
   9341 
   9342 Target Specific Changes
   9343 
   9344   IA-32/x86-64
   9345 
   9346      * Support for the [51]deprecated pcommit instruction has been
   9347        removed.
   9348 
   9349                                   [52]GCC 6.4
   9350 
   9351    This is the [53]list of problem reports (PRs) from GCC's bug tracking
   9352    system that are known to be fixed in the 6.4 release. This list might
   9353    not be complete (that is, it is possible that some PRs that have been
   9354    fixed are not listed here).
   9355 
   9356 [54]Operating Systems
   9357 
   9358   [55]RTEMS
   9359 
   9360      * The ABI changes on ARM so that no short enums are used by default.
   9361 
   9362                                   [56]GCC 6.5
   9363 
   9364    This is the [57]list of problem reports (PRs) from GCC's bug tracking
   9365    system that are known to be fixed in the 6.5 release. This list might
   9366    not be complete (that is, it is possible that some PRs that have been
   9367    fixed are not listed here).
   9368 
   9369 
   9370     For questions related to the use of GCC, please consult these web
   9371     pages and the [58]GCC manuals. If that fails, the
   9372     [59]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   9373     web pages and the development of GCC are welcome on our developer
   9374     list at [60]gcc (a] gcc.gnu.org. All of [61]our lists have public
   9375     archives.
   9376 
   9377    Copyright (C) [62]Free Software Foundation, Inc. Verbatim copying and
   9378    distribution of this entire article is permitted in any medium,
   9379    provided this notice is preserved.
   9380 
   9381    These pages are [63]maintained by the GCC team. Last modified
   9382    2025-01-31.
   9383 
   9384 References
   9385 
   9386    1. https://gcc.gnu.org/gcc-6/porting_to.html
   9387    2. https://gcc.gnu.org/onlinedocs/index.html#current
   9388    3. https://gcc.gnu.org/ml/gcc/2015-08/msg00101.html
   9389    4. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71151
   9390    5. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87822
   9391    6. https://gcc.gnu.org/gcc-6/changes.html#general
   9392    7. https://gcc.gnu.org/gcc-6/changes.html#languages
   9393    8. https://www.openacc.org/
   9394    9. https://gcc.gnu.org/wiki/OpenACC
   9395   10. https://gcc.gnu.org/wiki/Offloading
   9396   11. https://gcc.gnu.org/gcc-6/changes.html#c-family
   9397   12. https://www.openmp.org/specifications/
   9398   13. https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-1266
   9399   14. https://gcc.gnu.org/gcc-6/changes.html#c
   9400   15. https://gcc.gnu.org/gcc-6/changes.html#cxx
   9401   16. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4377.pdf
   9402   17. https://gcc.gnu.org/projects/cxx-status.html#cxx1z
   9403   18. https://gcc.gnu.org/gcc-6/changes.html#libstdcxx
   9404   19. https://gcc.gnu.org/gcc-6/changes.html#fortran
   9405   20. https://gcc.gnu.org/gcc-6/changes.html#jit
   9406   21. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/jit/topics/performance.html
   9407   22. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/jit/topics/functions.html#gcc_jit_block_end_with_switch
   9408   23. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/jit/topics/contexts.html#gcc_jit_context_set_bool_allow_unreachable_blocks
   9409   24. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/jit/topics/contexts.html#gcc_jit_context_add_command_line_option
   9410   25. https://gcc.gnu.org/gcc-6/changes.html#targets
   9411   26. https://gcc.gnu.org/gcc-6/changes.html#aarch64
   9412   27. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/gcc/AArch64-Function-Attributes.html#AArch64-Function-Attributes
   9413   28. https://gcc.gnu.org/gcc-6/changes.html#arm
   9414   29. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/gcc/ARM-Function-Attributes.html#ARM-Function-Attributes
   9415   30. https://gcc.gnu.org/gcc-6/changes.html#hsa
   9416   31. https://gcc.gnu.org/gcc-6/changes.html#x86
   9417   32. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/gcc/Named-Address-Spaces.html#Named-Address-Spaces
   9418   33. https://gcc.gnu.org/gcc-6/changes.html#mep
   9419   34. https://gcc.gnu.org/gcc-6/changes.html#msp430
   9420   35. https://gcc.gnu.org/gcc-6/changes.html#powerpc
   9421   36. https://gcc.gnu.org/gcc-6/changes.html#s390
   9422   37. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/gcc/S_002f390-Function-Attributes.html#S_002f390-Function-Attributes
   9423   38. https://gcc.gnu.org/gcc-6/changes.html#sh
   9424   39. https://gcc.gnu.org/gcc-6/changes.html#sparc
   9425   40. https://gcc.gnu.org/gcc-6/changes.html#os
   9426   41. https://gcc.gnu.org/gcc-6/changes.html#aix
   9427   42. https://gcc.gnu.org/gcc-6/changes.html#linux
   9428   43. http://www.musl-libc.org/
   9429   44. https://gcc.gnu.org/gcc-6/changes.html#rtems
   9430   45. https://gcc.gnu.org/gcc-6/changes.html#solaris
   9431   46. https://gcc.gnu.org/gcc-6/changes.html#windows
   9432   47. https://gcc.gnu.org/gcc-6/changes.html#GCC6.2
   9433   48. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=6.2
   9434   49. https://gcc.gnu.org/gcc-6/changes.html#GCC6.3
   9435   50. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=6.3
   9436   51. https://www.intel.com/content/www/us/en/developer/articles/technical/deprecate-pcommit-instruction.html
   9437   52. https://gcc.gnu.org/gcc-6/changes.html#GCC6.4
   9438   53. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=6.4
   9439   54. https://gcc.gnu.org/gcc-6/changes.html#os64
   9440   55. https://gcc.gnu.org/gcc-6/changes.html#rtems64
   9441   56. https://gcc.gnu.org/gcc-6/changes.html#GCC6.5
   9442   57. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=6.5
   9443   58. https://gcc.gnu.org/onlinedocs/
   9444   59. mailto:gcc-help (a] gcc.gnu.org
   9445   60. mailto:gcc (a] gcc.gnu.org
   9446   61. https://gcc.gnu.org/lists.html
   9447   62. https://www.fsf.org/
   9448   63. https://gcc.gnu.org/about.html
   9449 ======================================================================
   9450 http://gcc.gnu.org/gcc-5/index.html
   9451 
   9452                               GCC 5 Release Series
   9453 
   9454    (This release series is no longer supported.)
   9455 
   9456    October 10, 2017
   9457 
   9458    The [1]GNU project and the GCC developers are pleased to announce the
   9459    release of GCC 5.5.
   9460 
   9461    This release is a bug-fix release, containing fixes for regressions in
   9462    GCC 5.4 relative to previous releases of GCC.
   9463 
   9464 Release History
   9465 
   9466    GCC 5.5
   9467           October 10, 2017 ([2]changes, [3]documentation)
   9468 
   9469    GCC 5.4
   9470           June 3, 2016 ([4]changes, [5]documentation)
   9471 
   9472    GCC 5.3
   9473           December 4, 2015 ([6]changes, [7]documentation)
   9474 
   9475    GCC 5.2
   9476           July 16, 2015 ([8]changes, [9]documentation)
   9477 
   9478    GCC 5.1
   9479           April 22, 2015 ([10]changes, [11]documentation)
   9480 
   9481 References and Acknowledgements
   9482 
   9483    GCC used to stand for the GNU C Compiler, but since the compiler
   9484    supports several other languages aside from C, it now stands for the
   9485    GNU Compiler Collection.
   9486 
   9487    A list of [12]successful builds is updated as new information becomes
   9488    available.
   9489 
   9490    The GCC developers would like to thank the numerous people that have
   9491    contributed new features, improvements, bug fixes, and other changes as
   9492    well as test results to GCC. This [13]amazing group of volunteers is
   9493    what makes GCC successful.
   9494 
   9495    For additional information about GCC please refer to the [14]GCC
   9496    project web site or contact the [15]GCC development mailing list.
   9497 
   9498    To obtain GCC please use [16]our mirror sites or [17]our version
   9499    control system.
   9500 
   9501 
   9502     For questions related to the use of GCC, please consult these web
   9503     pages and the [18]GCC manuals. If that fails, the
   9504     [19]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   9505     web pages and the development of GCC are welcome on our developer
   9506     list at [20]gcc (a] gcc.gnu.org. All of [21]our lists have public
   9507     archives.
   9508 
   9509    Copyright (C) [22]Free Software Foundation, Inc. Verbatim copying and
   9510    distribution of this entire article is permitted in any medium,
   9511    provided this notice is preserved.
   9512 
   9513    These pages are [23]maintained by the GCC team. Last modified
   9514    2024-05-30.
   9515 
   9516 References
   9517 
   9518    1. http://www.gnu.org/
   9519    2. https://gcc.gnu.org/gcc-5/changes.html
   9520    3. https://gcc.gnu.org/onlinedocs/5.5.0/
   9521    4. https://gcc.gnu.org/gcc-5/changes.html
   9522    5. https://gcc.gnu.org/onlinedocs/5.4.0/
   9523    6. https://gcc.gnu.org/gcc-5/changes.html
   9524    7. https://gcc.gnu.org/onlinedocs/5.3.0/
   9525    8. https://gcc.gnu.org/gcc-5/changes.html
   9526    9. https://gcc.gnu.org/onlinedocs/5.2.0/
   9527   10. https://gcc.gnu.org/gcc-5/changes.html
   9528   11. https://gcc.gnu.org/onlinedocs/5.1.0/
   9529   12. https://gcc.gnu.org/gcc-5/buildstat.html
   9530   13. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   9531   14. https://gcc.gnu.org/index.html
   9532   15. mailto:gcc (a] gcc.gnu.org
   9533   16. https://gcc.gnu.org/mirrors.html
   9534   17. https://gcc.gnu.org/git.html
   9535   18. https://gcc.gnu.org/onlinedocs/
   9536   19. mailto:gcc-help (a] gcc.gnu.org
   9537   20. mailto:gcc (a] gcc.gnu.org
   9538   21. https://gcc.gnu.org/lists.html
   9539   22. https://www.fsf.org/
   9540   23. https://gcc.gnu.org/about.html
   9541 ======================================================================
   9542 http://gcc.gnu.org/gcc-5/changes.html
   9543 
   9544                               GCC 5 Release Series
   9545                         Changes, New Features, and Fixes
   9546 
   9547 Caveats
   9548 
   9549      * The default mode for C is now -std=gnu11 instead of -std=gnu89.
   9550      * The C++ runtime library (libstdc++) uses a new ABI by default (see
   9551        [1]below).
   9552      * The Graphite framework for loop optimizations no longer requires
   9553        the CLooG library, only ISL version 0.14 (recommended) or 0.12.2.
   9554        The installation manual contains more information about
   9555        requirements to build GCC.
   9556      * The non-standard C++0x type traits has_trivial_default_constructor,
   9557        has_trivial_copy_constructor and has_trivial_copy_assign have been
   9558        deprecated and will be removed in a future version. The standard
   9559        C++11 traits is_trivially_default_constructible,
   9560        is_trivially_copy_constructible and is_trivially_copy_assignable
   9561        should be used instead.
   9562 
   9563 [2]General Optimizer Improvements
   9564 
   9565      * Inter-procedural optimization improvements:
   9566           + An Identical Code Folding (ICF) pass (controlled via
   9567             -fipa-icf) has been added. Compared to the identical code
   9568             folding performed by the Gold linker this pass does not
   9569             require function sections. It also performs merging before
   9570             inlining, so inter-procedural optimizations are aware of the
   9571             code re-use. On the other hand not all unifications performed
   9572             by a linker are doable by GCC which must honor aliasing
   9573             information. During link-time optimization of Firefox, this
   9574             pass unifies about 31000 functions, that is 14% overall.
   9575           + The devirtualization pass was significantly improved by adding
   9576             better support for speculative devirtualization and dynamic
   9577             type detection. About 50% of virtual calls in Firefox are now
   9578             speculatively devirtualized during link-time optimization.
   9579           + A new comdat localization pass allows the linker to eliminate
   9580             more dead code in presence of C++ inline functions.
   9581           + Virtual tables are now optimized. Local aliases are used to
   9582             reduce dynamic linking time of C++ virtual tables on ELF
   9583             targets and data alignment has been reduced to limit data
   9584             segment bloat.
   9585           + A new -fno-semantic-interposition option can be used to
   9586             improve code quality of shared libraries where interposition
   9587             of exported symbols is not allowed.
   9588           + Write-only variables are now detected and optimized out.
   9589           + With profile feedback the function inliner can now bypass
   9590             --param inline-insns-auto and --param inline-insns-single
   9591             limits for hot calls.
   9592           + The IPA reference pass was significantly sped up making it
   9593             feasible to enable -fipa-reference with -fprofile-generate.
   9594             This also solves a bottleneck seen when building Chromium with
   9595             link-time optimization.
   9596           + The symbol table and call-graph API was reworked to C++ and
   9597             simplified.
   9598           + The interprocedural propagation of constants now also
   9599             propagates alignments of pointer parameters. This for example
   9600             means that the vectorizer often does not need to generate loop
   9601             prologues and epilogues to make up for potential
   9602             misalignments.
   9603      * Link-time optimization improvements:
   9604           + One Definition Rule based merging of C++ types has been
   9605             implemented. Type merging enables better devirtualization and
   9606             alias analysis. Streaming extra information needed to merge
   9607             types adds about 2-6% of memory size and object size increase.
   9608             This can be controlled by -flto-odr-type-merging.
   9609           + Command-line optimization and target options are now streamed
   9610             on a per-function basis and honored by the link-time
   9611             optimizer. This change makes link-time optimization a more
   9612             transparent replacement of per-file optimizations. It is now
   9613             possible to build projects that require different optimization
   9614             settings for different translation units (such as -ffast-math,
   9615             -mavx, or -finline). Contrary to earlier GCC releases, the
   9616             optimization and target options passed on the link command
   9617             line are ignored.
   9618             Note that this applies only to those command-line options that
   9619             can be passed to optimize and target attributes. Command-line
   9620             options affecting global code generation (such as -fpic),
   9621             warnings (such as -Wodr), optimizations affecting the way
   9622             static variables are optimized (such as -fcommon), debug
   9623             output (such as -g), and --param parameters can be applied
   9624             only to the whole link-time optimization unit. In these cases,
   9625             it is recommended to consistently use the same options at both
   9626             compile time and link time.
   9627           + GCC bootstrap now uses slim LTO object files.
   9628           + Memory usage and link times were improved. Tree merging was
   9629             sped up, memory usage of GIMPLE declarations and types was
   9630             reduced, and, support for on-demand streaming of variable
   9631             constructors was added.
   9632      * Feedback directed optimization improvements:
   9633           + A new auto-FDO mode uses profiles collected by low overhead
   9634             profiling tools (perf) instead of more expensive program
   9635             instrumentation (via -fprofile-generate). SPEC2006 benchmarks
   9636             on x86-64 improve by 4.7% with auto-FDO and by 7.3% with
   9637             traditional feedback directed optimization.
   9638           + Profile precision was improved in presence of C++ inline and
   9639             extern inline functions.
   9640           + The new gcov-tool utility allows manipulating profiles.
   9641           + Profiles are now more tolerant to source file changes (this
   9642             can be controlled by --param profile-func-internal-id).
   9643      * Register allocation improvements:
   9644           + A new local register allocator (LRA) sub-pass, controlled by
   9645             -flra-remat, implements control-flow sensitive global register
   9646             rematerialization. Instead of spilling and restoring a
   9647             register value, it is recalculated if it is profitable. The
   9648             sub-pass improved SPEC2000 generated code by 1% and 0.5%
   9649             correspondingly on ARM and x86-64.
   9650           + Reuse of the PIC hard register, instead of using a fixed
   9651             register, was implemented on x86/x86-64 targets. This improves
   9652             generated PIC code performance as more hard registers can be
   9653             used. Shared libraries can significantly benefit from this
   9654             optimization. Currently it is switched on only for x86/x86-64
   9655             targets. As RA infrastructure is already implemented for PIC
   9656             register reuse, other targets might follow this in the future.
   9657           + A simple form of inter-procedural RA was implemented. When it
   9658             is known that a called function does not use caller-saved
   9659             registers, save/restore code is not generated around the call
   9660             for such registers. This optimization can be controlled by
   9661             -fipa-ra
   9662           + LRA is now much more effective at generating spills of general
   9663             registers into vector registers instead of memory on
   9664             architectures (e.g., modern Intel processors) where this is
   9665             profitable.
   9666      * UndefinedBehaviorSanitizer gained a few new sanitization options:
   9667           + -fsanitize=float-divide-by-zero: detect floating-point
   9668             division by zero;
   9669           + -fsanitize=float-cast-overflow: check that the result of
   9670             floating-point type to integer conversions do not overflow;
   9671           + -fsanitize=bounds: enable instrumentation of array bounds and
   9672             detect out-of-bounds accesses;
   9673           + -fsanitize=alignment: enable alignment checking, detect
   9674             various misaligned objects;
   9675           + -fsanitize=object-size: enable object size checking, detect
   9676             various out-of-bounds accesses.
   9677           + -fsanitize=vptr: enable checking of C++ member function calls,
   9678             member accesses and some conversions between pointers to base
   9679             and derived classes, detect if the referenced object does not
   9680             have the correct dynamic type.
   9681      * Pointer Bounds Checker, a bounds violation detector, has been added
   9682        and can be enabled via -fcheck-pointer-bounds. Memory accesses are
   9683        instrumented with run-time checks of used pointers against their
   9684        bounds to detect pointer bounds violations (overflows). The Pointer
   9685        Bounds Checker is available on x86/x86-64 GNU/Linux targets with a
   9686        new ISA extension Intel MPX support. See the Pointer Bounds Checker
   9687        [3]Wiki page for more details.
   9688 
   9689 [4]New Languages and Language specific improvements
   9690 
   9691      * [5]OpenMP 4.0 specification offloading features are now supported
   9692        by the C, C++, and Fortran compilers. Generic changes:
   9693           + Infrastructure (suitable for any vendor).
   9694           + Testsuite which covers offloading from the [6]OpenMP 4.0
   9695             Examples document.
   9696        Specific for upcoming Intel Xeon Phi products:
   9697           + Run-time library.
   9698           + Card emulator.
   9699      * GCC 5 includes a preliminary implementation of the OpenACC 2.0a
   9700        specification. OpenACC is intended for programming accelerator
   9701        devices such as GPUs. See [7]the OpenACC wiki page for more
   9702        information.
   9703 
   9704   [8]C family
   9705 
   9706      * The default setting of the -fdiagnostics-color= command-line option
   9707        is now [9]configurable when building GCC using configuration option
   9708        --with-diagnostics-color=. The possible values are: never, always,
   9709        auto and auto-if-env. The new default auto uses color only when the
   9710        standard error is a terminal. The default in GCC 4.9 was
   9711        auto-if-env, which is equivalent to auto if there is a non-empty
   9712        GCC_COLORS environment variable, and never otherwise. As in GCC
   9713        4.9, an empty GCC_COLORS variable in the environment will always
   9714        disable colors, no matter what the default is or what command-line
   9715        options are used.
   9716      * A new command-line option -Wswitch-bool has been added for the C
   9717        and C++ compilers, which warns whenever a switch statement has an
   9718        index of boolean type.
   9719      * A new command-line option -Wlogical-not-parentheses has been added
   9720        for the C and C++ compilers, which warns about "logical not" used
   9721        on the left hand side operand of a comparison.
   9722      * A new command-line option -Wsizeof-array-argument has been added
   9723        for the C and C++ compilers, which warns when the sizeof operator
   9724        is applied to a parameter that has been declared as an array in a
   9725        function definition.
   9726      * A new command-line option -Wbool-compare has been added for the C
   9727        and C++ compilers, which warns about boolean expressions compared
   9728        with an integer value different from true/false.
   9729      * Full support for Cilk Plus has been added to the GCC compiler. Cilk
   9730        Plus is an extension to the C and C++ languages to support data and
   9731        task parallelism.
   9732      * A new attribute no_reorder prevents reordering of selected symbols
   9733        against other such symbols or inline assembler. This enables to
   9734        link-time optimize the Linux kernel without having to resort to
   9735        -fno-toplevel-reorder that disables several optimizations.
   9736      * New preprocessor constructs, __has_include and __has_include_next,
   9737        to test the availability of headers have been added.
   9738        This demonstrates a way to include the header <optional> only if it
   9739        is available:
   9740 
   9741 #ifdef __has_include
   9742 #  if __has_include(<optional>)
   9743 #    include <optional>
   9744 #    define have_optional 1
   9745 #  elif __has_include(<experimental/optional>)
   9746 #    include <experimental/optional>
   9747 #    define have_optional 1
   9748 #    define experimental_optional
   9749 #  else
   9750 #    define have_optional 0
   9751 #  endif
   9752 #endif
   9753 
   9754        The header search paths for __has_include and __has_include_next
   9755        are equivalent to those of the standard directive #include and the
   9756        extension #include_next respectively.
   9757      * A new built-in function-like macro to determine the existence of an
   9758        attribute, __has_attribute, has been added. The equivalent built-in
   9759        macro __has_cpp_attribute was added to C++ to support
   9760        [10]Feature-testing recommendations for C++. The macro
   9761        __has_attribute is added to all C-like languages as an extension:
   9762 
   9763 int
   9764 #ifdef __has_attribute
   9765 #  if __has_attribute(__noinline__)
   9766   __attribute__((__noinline__))
   9767 #  endif
   9768 #endif
   9769 foo(int x);
   9770 
   9771        If an attribute exists, a nonzero constant integer is returned. For
   9772        standardized C++ attributes a date is returned, otherwise the
   9773        constant returned is 1. Both __has_attribute and
   9774        __has_cpp_attribute will add underscores to an attribute name if
   9775        necessary to resolve the name. For C++11 and onwards the attribute
   9776        may be scoped.
   9777      * A new set of built-in functions for arithmetics with overflow
   9778        checking has been added: __builtin_add_overflow,
   9779        __builtin_sub_overflow and __builtin_mul_overflow and for
   9780        compatibility with clang also other variants. These builtins have
   9781        two integral arguments (which don't need to have the same type),
   9782        the arguments are extended to infinite precision signed type, +, -
   9783        or * is performed on those, and the result is stored in an integer
   9784        variable pointed to by the last argument. If the stored value is
   9785        equal to the infinite precision result, the built-in functions
   9786        return false, otherwise true. The type of the integer variable that
   9787        will hold the result can be different from the types of the first
   9788        two arguments. The following snippet demonstrates how this can be
   9789        used in computing the size for the calloc function:
   9790 
   9791 void *
   9792 calloc (size_t x, size_t y)
   9793 {
   9794   size_t sz;
   9795   if (__builtin_mul_overflow (x, y, &sz))
   9796     return NULL;
   9797   void *ret = malloc (sz);
   9798   if (ret) memset (res, 0, sz);
   9799   return ret;
   9800 }
   9801 
   9802        On e.g. i?86 or x86-64 the above will result in a mul instruction
   9803        followed by a jump on overflow.
   9804      * The option -fextended-identifiers is now enabled by default for
   9805        C++, and for C99 and later C versions. Various bugs in the
   9806        implementation of extended identifiers have been fixed.
   9807 
   9808   [11]C
   9809 
   9810      * The default mode has been changed to -std=gnu11.
   9811      * A new command-line option -Wc90-c99-compat has been added to warn
   9812        about features not present in ISO C90, but present in ISO C99.
   9813      * A new command-line option -Wc99-c11-compat has been added to warn
   9814        about features not present in ISO C99, but present in ISO C11.
   9815      * It is possible to disable warnings about conversions between
   9816        pointers that have incompatible types via a new warning option
   9817        -Wno-incompatible-pointer-types; warnings about implicit
   9818        incompatible integer to pointer and pointer to integer conversions
   9819        via a new warning option -Wno-int-conversion; and warnings about
   9820        qualifiers on pointers being discarded via a new warning option
   9821        -Wno-discarded-qualifiers.
   9822      * To allow proper use of const qualifiers with multidimensional
   9823        arrays, GCC will not warn about incompatible pointer types anymore
   9824        for conversions between pointers to arrays with and without const
   9825        qualifier (except when using -pedantic). Instead, a new warning is
   9826        emitted only if the const qualifier is lost. This can be controlled
   9827        with a new warning option -Wno-discarded-array-qualifiers.
   9828      * The C front end now generates more precise caret diagnostics.
   9829      * The -pg command-line option now only affects the current file in an
   9830        LTO build.
   9831 
   9832   [12]C++
   9833 
   9834      * G++ now supports [13]C++14 variable templates.
   9835      * -Wnon-virtual-dtor doesn't warn anymore for final classes.
   9836      * Excessive template instantiation depth is now a fatal error. This
   9837        prevents excessive diagnostics that usually do not help to identify
   9838        the problem.
   9839      * G++ and libstdc++ now implement the feature-testing macros from
   9840        [14]Feature-testing recommendations for C++.
   9841      * G++ now allows typename in a template template parameter.
   9842 
   9843 template<template<typename> typename X> struct D; // OK
   9844 
   9845      * G++ now supports [15]C++14 aggregates with non-static data member
   9846        initializers.
   9847 
   9848 struct A { int i, j = i; };
   9849 A a = { 42 }; // a.j is also 42
   9850 
   9851      * G++ now supports [16]C++14 extended constexpr.
   9852 
   9853 constexpr int f (int i)
   9854 {
   9855   int j = 0;
   9856   for (; i > 0; --i)
   9857     ++j;
   9858   return j;
   9859 }
   9860 
   9861 constexpr int i = f(42); // i is 42
   9862 
   9863      * G++ now supports the [17]C++14 sized deallocation functions.
   9864 
   9865 void operator delete (void *, std::size_t) noexcept;
   9866 void operator delete[] (void *, std::size_t) noexcept;
   9867 
   9868      * A new One Definition Rule violation warning (controlled by -Wodr)
   9869        detects mismatches in type definitions and virtual table contents
   9870        during link-time optimization.
   9871      * New warnings -Wsuggest-final-types and -Wsuggest-final-methods help
   9872        developers to annotate programs with final specifiers (or anonymous
   9873        namespaces) to improve code generation. These warnings can be used
   9874        at compile time, but they are more useful in combination with
   9875        link-time optimization.
   9876      * G++ no longer supports [18]N3639 variable length arrays, as they
   9877        were removed from the C++14 working paper prior to ratification.
   9878        GNU VLAs are still supported, so VLA support is now the same in
   9879        C++14 mode as in C++98 and C++11 modes.
   9880      * G++ now allows passing a non-trivially-copyable class via C
   9881        varargs, which is conditionally-supported with
   9882        implementation-defined semantics in the standard. This uses the
   9883        same calling convention as a normal value parameter.
   9884      * G++ now defaults to -fabi-version=9 and -fabi-compat-version=2. So
   9885        various mangling bugs are fixed, but G++ will still emit aliases
   9886        with the old, wrong mangling where feasible. -Wabi=2 will warn
   9887        about differences between ABI version 2 and the current setting.
   9888      * G++ 5.2 fixes the alignment of std::nullptr_t. Most code is likely
   9889        to be unaffected, but -Wabi=8 will warn about a non-static data
   9890        member with type std::nullptr_t which changes position due to this
   9891        change.
   9892 
   9893     [19]Runtime Library (libstdc++)
   9894 
   9895      * A [20]Dual ABI is provided by the library. A new ABI is enabled by
   9896        default. The old ABI is still supported and can be used by defining
   9897        the macro _GLIBCXX_USE_CXX11_ABI to 0 before including any C++
   9898        standard library headers.
   9899      * A new implementation of std::string is enabled by default, using
   9900        the small string optimization instead of copy-on-write reference
   9901        counting.
   9902      * A new implementation of std::list is enabled by default, with an
   9903        O(1) size() function;
   9904      * [21]Full support for C++11, including the following new features:
   9905           + std::deque and std::vector<bool> meet the allocator-aware
   9906             container requirements;
   9907           + movable and swappable iostream classes;
   9908           + support for std::align and std::aligned_union;
   9909           + type traits std::is_trivially_copyable,
   9910             std::is_trivially_constructible, std::is_trivially_assignable
   9911             etc.;
   9912           + I/O manipulators std::put_time, std::get_time, std::hexfloat
   9913             and std::defaultfloat;
   9914           + generic locale-aware std::isblank;
   9915           + locale facets for Unicode conversion;
   9916           + atomic operations for std::shared_ptr;
   9917           + std::notify_all_at_thread_exit() and functions for making
   9918             futures ready at thread exit.
   9919      * Support for the C++11 hexfloat manipulator changes how the num_put
   9920        facet formats floating point types when
   9921        ios_base::fixed|ios_base::scientific is set in a stream's fmtflags.
   9922        This change affects all language modes, even though the C++98
   9923        standard gave no special meaning to that combination of flags. To
   9924        prevent the use of hexadecimal notation for floating point types
   9925        use str.unsetf(std::ios_base::floatfield) to clear the relevant
   9926        bits in str.flags().
   9927      * [22]Full experimental support for C++14, including the following
   9928        new features:
   9929           + std::is_final type trait;
   9930           + heterogeneous comparison lookup in associative containers.
   9931           + global functions cbegin, cend, rbegin, rend, crbegin, and
   9932             crend for range access to containers, arrays and initializer
   9933             lists.
   9934      * [23]Improved experimental support for the Library Fundamentals TS,
   9935        including:
   9936           + class std::experimental::any;
   9937           + function template std::experimental::apply;
   9938           + function template std::experimental::sample;
   9939           + function template std::experimental::search and related
   9940             searcher types;
   9941           + variable templates for type traits;
   9942           + function template std::experimental::not_fn.
   9943      * New random number distributions logistic_distribution and
   9944        uniform_on_sphere_distribution as extensions.
   9945      * [24]GDB Xmethods for containers and std::unique_ptr.
   9946 
   9947   [25]Fortran
   9948 
   9949      * Compatibility notice:
   9950           + The version of the module files (.mod) has been incremented.
   9951           + For free-form source files [26]-Werror=line-truncation is now
   9952             enabled by default. Note that comments exceeding the line
   9953             length are not diagnosed. (For fixed-form source code, the
   9954             same warning is available but turned off by default, such that
   9955             excess characters are ignored. -ffree-line-length-n and
   9956             -ffixed-line-length-n can be used to modify the default line
   9957             lengths of 132 and 72 columns, respectively.)
   9958           + The -Wtabs option is now more sensible: with -Wtabs the
   9959             compiler warns if it encounters tabs and with -Wno-tabs this
   9960             warning is turned off. Before, -Wno-tabs warned and -Wtabs
   9961             disabled the warning. As before, this warning is also enabled
   9962             by -Wall, -pedantic and the f95, f2003, f2008 and f2008ts
   9963             options of -std=.
   9964      * Incomplete support for colorizing diagnostics emitted by gfortran
   9965        has been added. The option [27]-fdiagnostics-color controls when
   9966        color is used in diagnostics. The default value of this option can
   9967        be [28]configured when building GCC. The GCC_COLORS environment
   9968        variable can be used to customize the colors or disable coloring
   9969        completely. Sample diagnostics output:
   9970       $ gfortran -fdiagnostics-color=always -Wuse-without-only test.f90
   9971       test.f90:6:1:
   9972 
   9973        0 continue
   9974        1
   9975       Error: Zero is not a valid statement label at (1)
   9976       test.f90:9:6:
   9977 
   9978          USE foo
   9979             1
   9980       Warning: USE statement at (1) has no ONLY qualifier [-Wuse-without-only]
   9981 
   9982      * The -Wuse-without-only option has been added to warn when a USE
   9983        statement has no ONLY qualifier and thus implicitly imports all
   9984        public entities of the used module.
   9985      * Formatted READ and WRITE statements now work correctly in
   9986        locale-aware programs. For more information and potential caveats,
   9987        see [29]Section 5.3 Thread-safety of the runtime library in the
   9988        manual.
   9989      * [30]Fortran 2003:
   9990           + The intrinsic IEEE modules (IEEE_FEATURES, IEEE_EXCEPTIONS and
   9991             IEEE_ARITHMETIC) are now supported.
   9992      * [31]Fortran 2008:
   9993           + [32]Coarrays: Full experimental support of Fortran 2008's
   9994             coarrays with -fcoarray=lib except for allocatable/pointer
   9995             components of derived-type coarrays. GCC currently only ships
   9996             with a single-image library (libcaf_single), but multi-image
   9997             support based on MPI and GASNet is provided by the libraries
   9998             of the [33]OpenCoarrays project.
   9999      * TS18508 Additional Parallel Features in Fortran:
   10000           + Support for the collective intrinsic subroutines CO_MAX,
   10001             CO_MIN, CO_SUM, CO_BROADCAST and CO_REDUCE has been added,
   10002             including -fcoarray=lib support.
   10003           + Support for the new atomic intrinsics has been added,
   10004             including -fcoarray=lib support.
   10005      * Fortran 2015:
   10006           + Support for IMPLICIT NONE (external, type).
   10007           + ERROR STOP is now permitted in pure procedures.
   10008 
   10009   [34]Go
   10010 
   10011      * GCC 5 provides a complete implementation of the Go 1.4.2 release.
   10012      * Building GCC 5 with Go enabled will install two new programs:
   10013        [35]go and [36]gofmt.
   10014 
   10015 [37]libgccjit
   10016 
   10017    New in GCC 5 is the ability to build GCC as a shared library for
   10018    embedding in other processes (such as interpreters), suitable for
   10019    Just-In-Time compilation to machine code.
   10020 
   10021    The shared library has a [38]C API and a [39]C++ wrapper API providing
   10022    some "syntactic sugar". There are also bindings available from 3rd
   10023    parties for [40]Python and for [41]D.
   10024 
   10025    For example, this library can be used by interpreters for [42]compiling
   10026    functions from bytecode to machine code.
   10027 
   10028    The library can also be used for ahead-of-time compilation, enabling
   10029    GCC to be plugged into a pre-existing front end. An example of using
   10030    this to build a compiler for an esoteric language we'll refer to as
   10031    "brainf" can be seen [43]here.
   10032 
   10033    libgccjit is licensed under the GPLv3 (or at your option, any later
   10034    version)
   10035 
   10036    It should be regarded as experimental at this time.
   10037 
   10038 [44]New Targets and Target Specific Improvements
   10039 
   10040   [45]Reporting stack usage
   10041 
   10042      * The BFIN, FT32, H8300, IQ2000 and M32C targets now support the
   10043        -fstack-usage option.
   10044 
   10045   [46]AArch64
   10046 
   10047      * Code generation for the ARM Cortex-A57 processor has been improved.
   10048        A more accurate instruction scheduling model for the processor is
   10049        now used, and a number of compiler tuning parameters have been set
   10050        to offer increased performance when compiling with -mcpu=cortex-a57
   10051        or -mtune=cortex-a57.
   10052      * A workaround for the ARM Cortex-A53 erratum 835769 has been added
   10053        and can be enabled by giving the -mfix-cortex-a53-835769 option.
   10054        Alternatively it can be enabled by default by configuring GCC with
   10055        the --enable-fix-cortex-a53-835769 option.
   10056      * The optional cryptographic extensions to the ARMv8-A architecture
   10057        are no longer enabled by default when specifying the
   10058        -mcpu=cortex-a53, -mcpu=cortex-a57 or -mcpu=cortex-a57.cortex-a53
   10059        options. To enable these extensions add +crypto to the value of
   10060        -mcpu or -march e.g. -mcpu=cortex-a53+crypto.
   10061      * Support has been added for the following processors (GCC
   10062        identifiers in parentheses): ARM Cortex-A72 (cortex-a72) and
   10063        initial support for its big.LITTLE combination with the ARM
   10064        Cortex-A53 (cortex-a72.cortex-a53), Cavium ThunderX (thunderx),
   10065        Applied Micro X-Gene 1 (xgene1), and Samsung Exynos M1 (exynos-m1).
   10066        The GCC identifiers can be used as arguments to the -mcpu or -mtune
   10067        options, for example: -mcpu=xgene1 or -mtune=cortex-a72.cortex-a53.
   10068        Using -mcpu=cortex-a72 requires a version of GNU binutils that has
   10069        support for the Cortex-A72.
   10070      * The transitional options -mlra and -mno-lra have been removed. The
   10071        AArch64 back end now uses the local register allocator (LRA) only.
   10072 
   10073   [47]ARM
   10074 
   10075      * Thumb-1 assembly code is now generated in unified syntax. The new
   10076        option -masm-syntax-unified specifies whether inline assembly code
   10077        is using unified syntax. By default the option is off which means
   10078        non-unified syntax is used. However this is subject to change in
   10079        future releases. Eventually the non-unified syntax will be
   10080        deprecated.
   10081      * It is now a configure-time error to use the --with-cpu configure
   10082        option with either of --with-tune or --with-arch.
   10083      * Code generation for the ARM Cortex-A57 processor has been improved.
   10084        A more accurate instruction scheduling model for the processor is
   10085        now used, and a number of compiler tuning parameters have been set
   10086        to offer increased performance when compiling with -mcpu=cortex-a57
   10087        or -mtune=cortex-a57.
   10088      * Support has been added for the following processors (GCC
   10089        identifiers in parentheses): ARM Cortex-A17 (cortex-a17) and
   10090        initial support for its big.LITTLE combination with the ARM
   10091        Cortex-A7 (cortex-a17.cortex-a7), ARM Cortex-A72 (cortex-a72) and
   10092        initial support for its big.LITTLE combination with the ARM
   10093        Cortex-A53 (cortex-a72.cortex-a53), ARM Cortex-M7 (cortex-m7),
   10094        Applied Micro X-Gene 1 (xgene1), and Samsung Exynos M1 (exynos-m1).
   10095        The GCC identifiers can be used as arguments to the -mcpu or -mtune
   10096        options, for example: -mcpu=xgene1 or -mtune=cortex-a72.cortex-a53.
   10097        Using -mcpu=cortex-a72 requires a version of GNU binutils that has
   10098        support for the Cortex-A72.
   10099      * The deprecated option -mwords-little-endian has been removed.
   10100      * The options -mapcs, -mapcs-frame, -mtpcs-frame and
   10101        -mtpcs-leaf-frame which are only applicable to the old ABI have
   10102        been deprecated.
   10103      * The transitional options -mlra and -mno-lra have been removed. The
   10104        ARM back end now uses the local register allocator (LRA) only.
   10105 
   10106   [48]AVR
   10107 
   10108      * Support has been added for the devices ATtiny4/5/9/10/20/40. This
   10109        requires Binutils 2.25 or newer.
   10110      * The port uses a new scheme to describe supported devices: For each
   10111        supported device, the compiler provides a device-specific [49]spec
   10112        file. If the compiler is used together with AVR-LibC, this requires
   10113        at least GCC 5.2 and a version of AVR-LibC which implements
   10114        [50]feature #44574.
   10115        As a consequence, the compiler no more supports individual devices
   10116        like ATmega8. Specifying, say, -mmcu=atmega8 triggers the usage of
   10117        the device-specific [51]spec file specs-atmega8 which is part of
   10118        the installation and describes options for the sub-processes like
   10119        compiler proper, assembler and linker. You can add support for a
   10120        new device -mmcu=mydevice as follows:
   10121          1. In an empty directory /someplace, create a new directory
   10122             device-specs.
   10123          2. Copy a device spec file from the installed device-specs
   10124             folder, follow the comments in that file and then save it as
   10125             /someplace/device-specs/specs-mydevice.
   10126          3. Add -B /someplace -mmcu=mydevice to the compiler's
   10127             command-line options. Notice that /someplace must specify an
   10128             absolute path and that mydevice must not start with "avr".
   10129          4. Provided you have a device-specific library libmydevice.a
   10130             available, you can put it at /someplace, dito for a
   10131             device-specific startup file crtmydevice.o.
   10132        The contents of the device spec files depend on the compiler's
   10133        configuration, in particular on --with-avrlibc=no and whether or
   10134        not it is configured for RTEMS.
   10135      * A new command-line option -nodevicelib has been added. It prevents
   10136        the compiler from linking against AVR-LibC's device-specific
   10137        library libdevice.a.
   10138      * The following three command-line options have been added:
   10139 
   10140         -mrmw
   10141                 Set if the device supports the read-modify-write
   10142                 instructions LAC, LAS, LAT and XCH.
   10143 
   10144         -mn-flash=size
   10145                 Specify the flash size of the device in units of 64 KiB,
   10146                 rounded up to the next integer as needed. This option
   10147                 affects the availability of the [52]AVR address-spaces.
   10148 
   10149         -mskip-bug
   10150                 Set if the device is affected by the respective silicon
   10151                 bug.
   10152 
   10153        These options are used internally in order to communicate between
   10154        the compiler and the device-spces file. They are set in the
   10155        device-specs file as needed. Don't set them by hand.
   10156 
   10157   [53]IA-32/x86-64
   10158 
   10159      * New ISA extensions support AVX-512{BW,DQ,VL,IFMA,VBMI} of Intel's
   10160        CPU codenamed Skylake Server was added to GCC. That includes inline
   10161        assembly support, new intrinsics, and basic autovectorization.
   10162        These new AVX-512 extensions are available via the following GCC
   10163        switches: AVX-512 Vector Length EVEX feature: -mavx512vl, AVX-512
   10164        Byte and Word instructions: -mavx512bw, AVX-512 Dword and Qword
   10165        instructions: -mavx512dq, AVX-512 FMA-52 instructions: -mavx512ifma
   10166        and for AVX-512 Vector Bit Manipulation Instructions: -mavx512vbmi.
   10167      * New ISA extensions support Intel MPX was added to GCC. This new
   10168        extension is available via the -mmpx compiler switch. Intel MPX is
   10169        a set of processor features which, with compiler, run-time library
   10170        and OS support, brings increased robustness to software by run-time
   10171        checking pointer references against their bounds. In GCC Intel MPX
   10172        is supported by Pointer Bounds Checker and libmpx run-time
   10173        libraries.
   10174      * The new -mrecord-mcount option for -pg generates a Linux kernel
   10175        style table of pointers to mcount or __fentry__ calls at the
   10176        beginning of functions. The new -mnop-mcount option in addition
   10177        also generates nops in place of the __fentry__ or mcount call, so
   10178        that a call per function can be later patched in. This can be used
   10179        for low overhead tracing or hot code patching.
   10180      * The new -malign-data option controls how GCC aligns variables.
   10181        -malign-data=compat uses increased alignment compatible with GCC
   10182        4.8 and earlier, -malign-data=abi uses alignment as specified by
   10183        the psABI, and -malign-data=cacheline uses increased alignment to
   10184        match the cache line size. -malign-data=compat is the default.
   10185      * The new -mskip-rax-setup option skips setting up the RAX register
   10186        when SSE is disabled and there are no variable arguments passed in
   10187        vector registers. This can be used to optimize the Linux kernel.
   10188 
   10189   [54]MIPS
   10190 
   10191      * MIPS Releases 3 and 5 are now directly supported. Use the
   10192        command-line options -mips32r3, -mips64r3, -mips32r5 and -mips64r5
   10193        to enable code-generation for these processors.
   10194      * The Imagination P5600 processor is now supported using the
   10195        -march=p5600 command-line option.
   10196      * The Cavium Octeon3 processor is now supported using the
   10197        -march=octeon3 command-line option.
   10198      * MIPS Release 6 is now supported using the -mips32r6 and -mips64r6
   10199        command-line options.
   10200      * The o32 ABI has been modified and extended. The o32 64-bit
   10201        floating-point register support is now obsolete and has been
   10202        removed. It has been replaced by three ABI extensions FPXX, FP64A,
   10203        and FP64. The meaning of the -mfp64 command-line option has
   10204        changed. It is now used to enable the FP64A and FP64 ABI
   10205        extensions.
   10206           + The FPXX extension requires that code generated to access
   10207             double-precision values use even-numbered registers. Code that
   10208             adheres to this extension is link-compatible with all other
   10209             o32 double-precision ABI variants and will execute correctly
   10210             in all hardware FPU modes. The command-line options -mabi=32
   10211             -mfpxx can be used to enable this extension. MIPS II is the
   10212             minimum processor required.
   10213           + The o32 FP64A extension requires that floating-point registers
   10214             be 64-bit and odd-numbered single-precision registers are not
   10215             allowed. Code that adheres to the o32 FP64A variant is
   10216             link-compatible with all other o32 double-precision ABI
   10217             variants. The command-line options -mabi=32 -mfp64
   10218             -mno-odd-spreg can be used to enable this extension. MIPS32R2
   10219             is the minimum processor required.
   10220           + The o32 FP64 extension also requires that floating-point
   10221             registers be 64-bit, but permits the use of single-precision
   10222             registers. Code that adheres to the o32 FP64 variant is
   10223             link-compatible with o32 FPXX and o32 FP64A variants only,
   10224             i.e. it is not compatible with the original o32
   10225             double-precision ABI. The command-line options -mabi=32 -mfp64
   10226             -modd-spreg can be used to enable this extension. MIPS32R2 is
   10227             the minimum processor required.
   10228        The new ABI variants can be enabled by default using the configure
   10229        time options --with-fp-32=[32|xx|64] and --with(out)-odd-sp-reg-32.
   10230        It is strongly recommended that all vendors begin to set o32 FPXX
   10231        as the default ABI. This will be required to run the generated code
   10232        on MIPSR5 cores in conjunction with future MIPS SIMD (MSA) code and
   10233        MIPSR6 cores.
   10234      * GCC will now pass all floating-point options to the assembler if
   10235        GNU binutils 2.25 is used. As a result, any inline assembly code
   10236        that uses hard-float instructions should be amended to include a
   10237        .set directive to override the global assembler options when
   10238        compiling for soft-float targets.
   10239 
   10240   [55]NDS32
   10241 
   10242      * The variadic function ABI implementation is now compatible with
   10243        past Andes toolchains where the caller uses registers to pass
   10244        arguments and the callee is in charge of pushing them on stack.
   10245      * The options -mforce-fp-as-gp, -mforbid-fp-as-gp, and -mex9 have
   10246        been removed since they are not yet available in the nds32 port of
   10247        GNU binutils.
   10248      * A new option -mcmodel=[small|medium|large] supports varied code
   10249        models on code generation. The -mgp-direct option became
   10250        meaningless and can be discarded.
   10251 
   10252   [56]RX
   10253 
   10254      * A new command line option -mno-allow-string-insns can be used to
   10255        disable the generation of the SCMPU, SMOVU, SMOVB, SMOVF, SUNTIL,
   10256        SWHILE and RMPA instructions. An erratum released by Renesas shows
   10257        that it is unsafe to use these instructions on addresses within the
   10258        I/O space of the processor. The new option can be used when the
   10259        programmer is concerned that the I/O space might be accessed. The
   10260        default is still to enable these instructions.
   10261 
   10262   [57]SH
   10263 
   10264      * The compiler will now pass the appropriate --isa= option to the
   10265        assembler.
   10266      * The default handling for the GBR has been changed from call
   10267        clobbered to call preserved. The old behavior can be reinstated by
   10268        specifying the option -fcall-used-gbr.
   10269      * Support for the SH4A fpchg instruction has been added which will be
   10270        utilized when switching between single and double precision FPU
   10271        modes.
   10272      * The compiler no longer uses the __fpscr_values array for switching
   10273        between single and double FPU precision modes on non-SH4A targets.
   10274        Instead mode switching will now be performed by storing, modifying
   10275        and reloading the FPSCR, so that other FPSCR bits are preserved
   10276        across mode switches. The __fpscr_values array that is defined in
   10277        libgcc is still present for backwards compatibility, but it will
   10278        not be referenced by compiler generated code anymore.
   10279      * New builtin functions __builtin_sh_get_fpscr and
   10280        __builtin_sh_set_fpscr have been added. The __builtin_sh_set_fpscr
   10281        function will mask the specified bits in such a way that the SZ, PR
   10282        and FR mode bits will be preserved, while changing the other bits.
   10283        These new functions do not reference the __fpscr_values array. The
   10284        old functions __set_fpscr and __get_fpscr in libgcc which access
   10285        the __fpscr_values array are still present for backwards
   10286        compatibility, but their usage is highly discouraged.
   10287      * Some improvements to code generated for __atomic built-in
   10288        functions.
   10289      * When compiling for SH2E the compiler will no longer force the usage
   10290        of delay slots for conditional branch instructions bt and bf. The
   10291        old behavior can be reinstated (e.g. to work around a hardware bug
   10292        in the original SH7055) by specifying the new option
   10293        -mcbranch-force-delay-slot.
   10294 
   10295 [58]Operating Systems
   10296 
   10297   [59]AIX
   10298 
   10299      * GCC now supports stabs debugging continuation lines to allow long
   10300        stabs debug information without overflow that generates AIX linker
   10301        errors.
   10302 
   10303   [60]DragonFly BSD
   10304 
   10305      * GCC now supports the DragonFly BSD operating system.
   10306 
   10307   [61]FreeBSD
   10308 
   10309      * GCC now supports the FreeBSD operating system for the arm port
   10310        through the arm*-*-freebsd* target triplets.
   10311 
   10312   [62]VxWorks MILS
   10313 
   10314      * GCC now supports the MILS (Multiple Independent Levels of Security)
   10315        variant of WindRiver's VxWorks operating system for PowerPC
   10316        targets.
   10317 
   10318 Other significant improvements
   10319 
   10320      * The gcc-ar, gcc-nm, gcc-ranlib wrappers now understand a -B option
   10321        to set the compiler to use.
   10322 
   10323      * When the new command-line option -freport-bug is used, GCC
   10324        automatically generates a developer-friendly reproducer whenever an
   10325        internal compiler error is encountered.
   10326 
   10327                                   [63]GCC 5.2
   10328 
   10329    This is the [64]list of problem reports (PRs) from GCC's bug tracking
   10330    system that are known to be fixed in the 5.2 release. This list might
   10331    not be complete (that is, it is possible that some PRs that have been
   10332    fixed are not listed here).
   10333 
   10334 Target Specific Changes
   10335 
   10336   IA-32/x86-64
   10337 
   10338      * Support for new AMD instructions monitorx and mwaitx has been
   10339        added. This includes new intrinsic and built-in support. It is
   10340        enabled through option -mmwaitx. The instructions monitorx and
   10341        mwaitx implement the same functionality as the old monitor and
   10342        mwait instructions. In addition, mwaitx adds a configurable timer.
   10343        The timer value is received as third argument and stored in
   10344        register %ebx.
   10345 
   10346   S/390, System z, IBM z Systems
   10347 
   10348      * Support for the IBM z13 processor has been added. When using the
   10349        -march=z13 option, the compiler will generate code making use of
   10350        the new instructions and registers introduced with the vector
   10351        extension facility. The -mtune=z13 option enables z13 specific
   10352        instruction scheduling without making use of new instructions.
   10353        Compiling code with -march=z13 reduces the default alignment of
   10354        vector types bigger than 8 bytes to 8. This is an ABI change and
   10355        care must be taken when linking modules compiled with different
   10356        arch levels which interchange variables containing vector type
   10357        values. For newly compiled code the GNU linker will emit a warning.
   10358      * The -mzvector option enables a C/C++ language extension. This
   10359        extension provides a new keyword vector which can be used to define
   10360        vector type variables. (Note: This is not available when enforcing
   10361        strict standard compliance e.g. with -std=c99. Either enable GNU
   10362        extensions with e.g. -std=gnu99 or use __vector instead of vector.)
   10363        Additionally a set of overloaded builtins is provided which is
   10364        partially compatible to the PowerPC Altivec builtins. In order to
   10365        make use of these builtins the vecintrin.h header file needs to be
   10366        included.
   10367 
   10368                                   [65]GCC 5.3
   10369 
   10370    This is the [66]list of problem reports (PRs) from GCC's bug tracking
   10371    system that are known to be fixed in the 5.3 release. This list might
   10372    not be complete (that is, it is possible that some PRs that have been
   10373    fixed are not listed here).
   10374 
   10375 Target Specific Changes
   10376 
   10377   IA-32/x86-64
   10378 
   10379      * GCC now supports the Intel CPU named Skylake with AVX-512
   10380        extensions through -march=skylake-avx512. The switch enables the
   10381        following ISA extensions: AVX-512F, AVX512VL, AVX-512CD, AVX-512BW,
   10382        AVX-512DQ.
   10383 
   10384   S/390, System z, IBM z Systems
   10385 
   10386      * With this version of GCC IBM z Systems support has been added to
   10387        the GO runtime environment. GCC 5.3 has proven to be able to
   10388        compile larger GO applications on IBM z Systems.
   10389 
   10390                                   [67]GCC 5.4
   10391 
   10392    This is the [68]list of problem reports (PRs) from GCC's bug tracking
   10393    system that are known to be fixed in the 5.4 release. This list might
   10394    not be complete (that is, it is possible that some PRs that have been
   10395    fixed are not listed here).
   10396 
   10397                                   [69]GCC 5.5
   10398 
   10399    This is the [70]list of problem reports (PRs) from GCC's bug tracking
   10400    system that are known to be fixed in the 5.5 release. This list might
   10401    not be complete (that is, it is possible that some PRs that have been
   10402    fixed are not listed here).
   10403 
   10404 Target Specific Changes
   10405 
   10406   IA-32/x86-64
   10407 
   10408      * Support for the [71]deprecated pcommit instruction has been
   10409        removed.
   10410 
   10411 
   10412     For questions related to the use of GCC, please consult these web
   10413     pages and the [72]GCC manuals. If that fails, the
   10414     [73]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   10415     web pages and the development of GCC are welcome on our developer
   10416     list at [74]gcc (a] gcc.gnu.org. All of [75]our lists have public
   10417     archives.
   10418 
   10419    Copyright (C) [76]Free Software Foundation, Inc. Verbatim copying and
   10420    distribution of this entire article is permitted in any medium,
   10421    provided this notice is preserved.
   10422 
   10423    These pages are [77]maintained by the GCC team. Last modified
   10424    2025-02-28.
   10425 
   10426 References
   10427 
   10428    1. https://gcc.gnu.org/gcc-5/changes.html#libstdcxx
   10429    2. https://gcc.gnu.org/gcc-5/changes.html#general
   10430    3. https://gcc.gnu.org/wiki/Intel%20MPX%20support%20in%20the%20GCC%20compiler
   10431    4. https://gcc.gnu.org/gcc-5/changes.html#languages
   10432    5. https://www.openmp.org/wp-content/uploads/OpenMP4.0.0.pdf
   10433    6. https://www.openmp.org/wp-content/uploads/OpenMP4.0.0.Examples.pdf
   10434    7. https://gcc.gnu.org/wiki/OpenACC
   10435    8. https://gcc.gnu.org/gcc-5/changes.html#c-family
   10436    9. https://gcc.gnu.org/install/configure.html
   10437   10. https://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations
   10438   11. https://gcc.gnu.org/gcc-5/changes.html#c
   10439   12. https://gcc.gnu.org/gcc-5/changes.html#cxx
   10440   13. https://gcc.gnu.org/projects/cxx1y.html
   10441   14. https://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations
   10442   15. https://gcc.gnu.org/projects/cxx1y.html
   10443   16. https://gcc.gnu.org/projects/cxx1y.html
   10444   17. https://gcc.gnu.org/projects/cxx1y.html
   10445   18. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3639.html
   10446   19. https://gcc.gnu.org/gcc-5/changes.html#libstdcxx
   10447   20. https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.html
   10448   21. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/libstdc++/manual/manual/status.html#status.iso.2011
   10449   22. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/libstdc++/manual/manual/status.html#status.iso.2014
   10450   23. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/libstdc++/manual/manual/status.html#status.iso.2014
   10451   24. https://sourceware.org/gdb/current/onlinedocs/gdb#Xmethods-In-Python
   10452   25. https://gcc.gnu.org/gcc-5/changes.html#fortran
   10453   26. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/gfortran/Error-and-Warning-Options.html
   10454   27. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/gcc/Language-Independent-Options.html
   10455   28. https://gcc.gnu.org/install/configure.html
   10456   29. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/gfortran/Thread-safety-of-the-runtime-library.html
   10457   30. https://gcc.gnu.org/wiki/Fortran2003Status
   10458   31. https://gcc.gnu.org/wiki/Fortran2008Status
   10459   32. https://gcc.gnu.org/wiki/Coarray
   10460   33. http://www.opencoarrays.org/
   10461   34. https://gcc.gnu.org/gcc-5/changes.html#go
   10462   35. https://pkg.go.dev/cmd/go
   10463   36. https://pkg.go.dev/cmd/gofmt
   10464   37. https://gcc.gnu.org/gcc-5/changes.html#jit
   10465   38. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/jit/intro/index.html
   10466   39. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/jit/cp/index.html
   10467   40. https://github.com/davidmalcolm/pygccjit
   10468   41. https://github.com/ibuclaw/gccjitd
   10469   42. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/jit/intro/tutorial04.html
   10470   43. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/jit/intro/tutorial05.html
   10471   44. https://gcc.gnu.org/gcc-5/changes.html#targets
   10472   45. https://gcc.gnu.org/gcc-5/changes.html#stack-usage
   10473   46. https://gcc.gnu.org/gcc-5/changes.html#aarch64
   10474   47. https://gcc.gnu.org/gcc-5/changes.html#arm
   10475   48. https://gcc.gnu.org/gcc-5/changes.html#avr
   10476   49. https://gcc.gnu.org/onlinedocs/gcc/Spec-Files.html
   10477   50. https://savannah.nongnu.org/bugs/?44574
   10478   51. https://gcc.gnu.org/onlinedocs/gcc/Spec-Files.html
   10479   52. https://gcc.gnu.org/onlinedocs/gcc/Named-Address-Spaces.html
   10480   53. https://gcc.gnu.org/gcc-5/changes.html#x86
   10481   54. https://gcc.gnu.org/gcc-5/changes.html#mips
   10482   55. https://gcc.gnu.org/gcc-5/changes.html#nds32
   10483   56. https://gcc.gnu.org/gcc-5/changes.html#rx
   10484   57. https://gcc.gnu.org/gcc-5/changes.html#sh
   10485   58. https://gcc.gnu.org/gcc-5/changes.html#os
   10486   59. https://gcc.gnu.org/gcc-5/changes.html#aix
   10487   60. https://gcc.gnu.org/gcc-5/changes.html#dragonfly
   10488   61. https://gcc.gnu.org/gcc-5/changes.html#freebsd
   10489   62. https://gcc.gnu.org/gcc-5/changes.html#vxmils
   10490   63. https://gcc.gnu.org/gcc-5/changes.html#GCC5.2
   10491   64. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=5.2
   10492   65. https://gcc.gnu.org/gcc-5/changes.html#GCC5.3
   10493   66. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=5.3
   10494   67. https://gcc.gnu.org/gcc-5/changes.html#GCC5.4
   10495   68. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=5.4
   10496   69. https://gcc.gnu.org/gcc-5/changes.html#GCC5.5
   10497   70. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=5.5
   10498   71. https://www.intel.com/content/www/us/en/developer/articles/technical/deprecate-pcommit-instruction.html
   10499   72. https://gcc.gnu.org/onlinedocs/
   10500   73. mailto:gcc-help (a] gcc.gnu.org
   10501   74. mailto:gcc (a] gcc.gnu.org
   10502   75. https://gcc.gnu.org/lists.html
   10503   76. https://www.fsf.org/
   10504   77. https://gcc.gnu.org/about.html
   10505 ======================================================================
   10506 http://gcc.gnu.org/gcc-4.9/index.html
   10507 
   10508                              GCC 4.9 Release Series
   10509 
   10510    (This release series is no longer supported.)
   10511 
   10512    Aug 3, 2016
   10513 
   10514    The [1]GNU project and the GCC developers are pleased to announce the
   10515    release of GCC 4.9.4.
   10516 
   10517    This release is a bug-fix release, containing fixes for regressions in
   10518    GCC 4.9.3 relative to previous releases of GCC.
   10519 
   10520 Release History
   10521 
   10522    GCC 4.9.4
   10523           Aug 3, 2016 ([2]changes, [3]documentation)
   10524 
   10525    GCC 4.9.3
   10526           June 26, 2015 ([4]changes, [5]documentation)
   10527 
   10528    GCC 4.9.2
   10529           October 30, 2014 ([6]changes, [7]documentation)
   10530 
   10531    GCC 4.9.1
   10532           July 16, 2014 ([8]changes, [9]documentation)
   10533 
   10534    GCC 4.9.0
   10535           April 22, 2014 ([10]changes, [11]documentation)
   10536 
   10537 References and Acknowledgements
   10538 
   10539    GCC used to stand for the GNU C Compiler, but since the compiler
   10540    supports several other languages aside from C, it now stands for the
   10541    GNU Compiler Collection.
   10542 
   10543    A list of [12]successful builds is updated as new information becomes
   10544    available.
   10545 
   10546    The GCC developers would like to thank the numerous people that have
   10547    contributed new features, improvements, bug fixes, and other changes as
   10548    well as test results to GCC. This [13]amazing group of volunteers is
   10549    what makes GCC successful.
   10550 
   10551    For additional information about GCC please refer to the [14]GCC
   10552    project web site or contact the [15]GCC development mailing list.
   10553 
   10554    To obtain GCC please use [16]our mirror sites or [17]our version
   10555    control system.
   10556 
   10557 
   10558     For questions related to the use of GCC, please consult these web
   10559     pages and the [18]GCC manuals. If that fails, the
   10560     [19]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   10561     web pages and the development of GCC are welcome on our developer
   10562     list at [20]gcc (a] gcc.gnu.org. All of [21]our lists have public
   10563     archives.
   10564 
   10565    Copyright (C) [22]Free Software Foundation, Inc. Verbatim copying and
   10566    distribution of this entire article is permitted in any medium,
   10567    provided this notice is preserved.
   10568 
   10569    These pages are [23]maintained by the GCC team. Last modified
   10570    2024-05-30.
   10571 
   10572 References
   10573 
   10574    1. http://www.gnu.org/
   10575    2. https://gcc.gnu.org/gcc-4.9/changes.html
   10576    3. https://gcc.gnu.org/onlinedocs/4.9.4/
   10577    4. https://gcc.gnu.org/gcc-4.9/changes.html
   10578    5. https://gcc.gnu.org/onlinedocs/4.9.3/
   10579    6. https://gcc.gnu.org/gcc-4.9/changes.html
   10580    7. https://gcc.gnu.org/onlinedocs/4.9.2/
   10581    8. https://gcc.gnu.org/gcc-4.9/changes.html
   10582    9. https://gcc.gnu.org/onlinedocs/4.9.1/
   10583   10. https://gcc.gnu.org/gcc-4.9/changes.html
   10584   11. https://gcc.gnu.org/onlinedocs/4.9.0/
   10585   12. https://gcc.gnu.org/gcc-4.9/buildstat.html
   10586   13. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   10587   14. https://gcc.gnu.org/index.html
   10588   15. mailto:gcc (a] gcc.gnu.org
   10589   16. https://gcc.gnu.org/mirrors.html
   10590   17. https://gcc.gnu.org/git.html
   10591   18. https://gcc.gnu.org/onlinedocs/
   10592   19. mailto:gcc-help (a] gcc.gnu.org
   10593   20. mailto:gcc (a] gcc.gnu.org
   10594   21. https://gcc.gnu.org/lists.html
   10595   22. https://www.fsf.org/
   10596   23. https://gcc.gnu.org/about.html
   10597 ======================================================================
   10598 http://gcc.gnu.org/gcc-4.9/changes.html
   10599 
   10600                              GCC 4.9 Release Series
   10601                         Changes, New Features, and Fixes
   10602 
   10603 Caveats
   10604 
   10605      * The mudflap run time checker has been removed. The mudflap options
   10606        remain, but do nothing.
   10607      * Support for a number of older systems and recently unmaintained or
   10608        untested target ports of GCC has been declared obsolete in GCC 4.9.
   10609        Unless there is activity to revive them, the next release of GCC
   10610        will have their sources permanently removed.
   10611        The following ports for individual systems on particular
   10612        architectures have been obsoleted:
   10613           + Solaris 9 (*-*-solaris2.9). Details can be found in the
   10614             [1]announcement.
   10615      * On AArch64, the singleton vector types int64x1_t, uint64x1_t and
   10616        float64x1_t exported by arm_neon.h are defined to be the same as
   10617        their base types. This results in incorrect application of
   10618        parameter passing rules to arguments of types int64x1_t and
   10619        uint64x1_t, with respect to the AAPCS64 ABI specification. In
   10620        addition, names of C++ functions with parameters of these types
   10621        (including float64x1_t) are not mangled correctly. The current
   10622        typedef declarations also unintentionally allow implicit casting
   10623        between singleton vector types and their base types. These issues
   10624        will be resolved in a near future release. See [2]PR60825 for more
   10625        information.
   10626 
   10627    More information on porting to GCC 4.9 from previous versions of GCC
   10628    can be found in the [3]porting guide for this release.
   10629 
   10630 General Optimizer Improvements
   10631 
   10632      * AddressSanitizer, a fast memory error detector, is now available on
   10633        ARM.
   10634      * UndefinedBehaviorSanitizer (ubsan), a fast undefined behavior
   10635        detector, has been added and can be enabled via
   10636        -fsanitize=undefined. Various computations will be instrumented to
   10637        detect undefined behavior at runtime. UndefinedBehaviorSanitizer is
   10638        currently available for the C and C++ languages.
   10639      * Link-time optimization (LTO) improvements:
   10640           + Type merging was rewritten. The new implementation is
   10641             significantly faster and uses less memory.
   10642           + Better partitioning algorithm resulting in less streaming
   10643             during link time.
   10644           + Early removal of virtual methods reduces the size of object
   10645             files and improves link-time memory usage and compile time.
   10646           + Function bodies are now loaded on-demand and released early
   10647             improving overall memory usage at link time.
   10648           + C++ hidden keyed methods can now be optimized out.
   10649           + When using a linker plugin, compiling with the -flto option
   10650             now generates slim object files (.o) which only contain
   10651             intermediate language representation for LTO. Use
   10652             -ffat-lto-objects to create files which contain additionally
   10653             the object code. To generate static libraries suitable for LTO
   10654             processing, use gcc-ar and gcc-ranlib; to list symbols from a
   10655             slim object file use gcc-nm. (This requires that ar, ranlib
   10656             and nm have been compiled with plugin support.)
   10657        Memory usage building Firefox with debug enabled was reduced from
   10658        15GB to 3.5GB; link time from 1700 seconds to 350 seconds.
   10659      * Inter-procedural optimization improvements:
   10660           + New type inheritance analysis module improving
   10661             devirtualization. Devirtualization now takes into account
   10662             anonymous name-spaces and the C++11 final keyword.
   10663           + New speculative devirtualization pass (controlled by
   10664             -fdevirtualize-speculatively.
   10665           + Calls that were speculatively made direct are turned back to
   10666             indirect where direct call is not cheaper.
   10667           + Local aliases are introduced for symbols that are known to be
   10668             semantically equivalent across shared libraries improving
   10669             dynamic linking times.
   10670      * Feedback directed optimization improvements:
   10671           + Profiling of programs using C++ inline functions is now more
   10672             reliable.
   10673           + New time profiling determines typical order in which functions
   10674             are executed.
   10675           + A new function reordering pass (controlled by
   10676             -freorder-functions) significantly reduces startup time of
   10677             large applications. Until binutils support is completed, it is
   10678             effective only with link-time optimization.
   10679           + Feedback driven indirect call removal and devirtualization now
   10680             handle cross-module calls when link-time optimization is
   10681             enabled.
   10682 
   10683 [4]New Languages and Language specific improvements
   10684 
   10685      * Version 4.0 of the [5]OpenMP specification is now supported in the
   10686        C and C++ compilers and starting with the 4.9.1 release also in the
   10687        Fortran compiler. The new -fopenmp-simd option can be used to
   10688        enable OpenMP's SIMD directives while ignoring other OpenMP
   10689        directives. The new [6]-fsimd-cost-model= option permits to tune
   10690        the vectorization cost model for loops annotated with OpenMP and
   10691        Cilk Plus simd directives. -Wopenmp-simd warns when the current
   10692        cost model overrides simd directives set by the user.
   10693      * The -Wdate-time option has been added for the C, C++ and Fortran
   10694        compilers, which warns when the __DATE__, __TIME__ or __TIMESTAMP__
   10695        macros are used. Those macros might prevent bit-wise-identical
   10696        reproducible compilations.
   10697 
   10698   [7]Ada
   10699 
   10700      * GNAT switched to Ada 2012 instead of Ada 2005 by default.
   10701 
   10702   [8]C family
   10703 
   10704      * Support for colorizing diagnostics emitted by GCC has been added.
   10705        The [9]-fdiagnostics-color=auto will enable it when outputting to
   10706        terminals, -fdiagnostics-color=always unconditionally. The
   10707        GCC_COLORS environment variable can be used to customize the colors
   10708        or disable coloring. If GCC_COLORS variable is present in the
   10709        environment, the default is -fdiagnostics-color=auto, otherwise
   10710        -fdiagnostics-color=never.
   10711        Sample diagnostics output:
   10712     $ g++ -fdiagnostics-color=always -S -Wall test.C
   10713     test.C: In function `int foo()':
   10714     test.C:1:14: warning: no return statement in function returning non-void [-W
   10715 return-type]
   10716      int foo () { }
   10717                   ^
   10718     test.C:2:46: error: template instantiation depth exceeds maximum of 900 (use
   10719  -ftemplate-depth= to increase the maximum) instantiating `struct X<100>'
   10720      template <int N> struct X { static const int value = X<N-1>::value; }; temp
   10721 late struct X<1000>;
   10722                                                   ^
   10723     test.C:2:46:   recursively required from `const int X<999>::value'
   10724     test.C:2:46:   required from `const int X<1000>::value'
   10725     test.C:2:88:   required from here
   10726 
   10727     test.C:2:46: error: incomplete type `X<100>' used in nested name specifier
   10728 
   10729      * With the new [10]#pragma GCC ivdep, the user can assert that there
   10730        are no loop-carried dependencies which would prevent concurrent
   10731        execution of consecutive iterations using SIMD (single instruction
   10732        multiple data) instructions.
   10733      * Support for Cilk Plus has been added and can be enabled with the
   10734        -fcilkplus option. Cilk Plus is an extension to the C and C++
   10735        languages to support data and task parallelism. The present
   10736        implementation follows ABI version 1.2; all features but _Cilk_for
   10737        have been implemented.
   10738 
   10739   C
   10740 
   10741      * ISO C11 atomics (the _Atomic type specifier and qualifier and the
   10742        <stdatomic.h> header) are now supported.
   10743      * ISO C11 generic selections (_Generic keyword) are now supported.
   10744      * ISO C11 thread-local storage (_Thread_local, similar to GNU C
   10745        __thread) is now supported.
   10746      * ISO C11 support is now at a similar level of completeness to ISO
   10747        C99 support: substantially complete modulo bugs, extended
   10748        identifiers (supported except for corner cases when
   10749        -fextended-identifiers is used), floating-point issues (mainly but
   10750        not entirely relating to optional C99 features from Annexes F and
   10751        G) and the optional Annexes K (Bounds-checking interfaces) and L
   10752        (Analyzability).
   10753      * A new C extension __auto_type provides a subset of the
   10754        functionality of C++11 auto in GNU C.
   10755 
   10756   [11]C++
   10757 
   10758      * The G++ implementation of [12]C++1y return type deduction for
   10759        normal functions has been updated to conform to [13]N3638, the
   10760        proposal accepted into the working paper. Most notably, it adds
   10761        decltype(auto) for getting decltype semantics rather than the
   10762        template argument deduction semantics of plain auto:
   10763 
   10764 int& f();
   10765          auto  i1 = f(); // int
   10766 decltype(auto) i2 = f(); // int&
   10767 
   10768      * G++ supports [14]C++1y lambda capture initializers:
   10769 
   10770 [x = 42]{ ... };
   10771 
   10772        Actually, they have been accepted since GCC 4.5, but now the
   10773        compiler doesn't warn about them with -std=c++1y, and supports
   10774        parenthesized and brace-enclosed initializers as well.
   10775      * G++ supports [15]C++1y variable length arrays. G++ has supported
   10776        GNU/C99-style VLAs for a long time, but now additionally supports
   10777        initializers and lambda capture by reference. In C++1y mode G++
   10778        will complain about VLA uses that are not permitted by the draft
   10779        standard, such as forming a pointer to VLA type or applying sizeof
   10780        to a VLA variable. Note that it now appears that VLAs will not be
   10781        part of C++14, but will be part of a separate document and then
   10782        perhaps C++17.
   10783 
   10784 void f(int n) {
   10785   int a[n] = { 1, 2, 3 }; // throws std::bad_array_length if n < 3
   10786   [&a]{ for (int i : a) { cout << i << endl; } }();
   10787   &a; // error, taking address of VLA
   10788 }
   10789 
   10790      * G++ supports the [16]C++1y [[deprecated]] attribute modulo bugs in
   10791        the underlying [[gnu::deprecated]] attribute. Classes and functions
   10792        can be marked deprecated and a diagnostic message added:
   10793 
   10794 class A;
   10795 int bar(int n);
   10796 #if __cplusplus > 201103
   10797 class [[deprecated("A is deprecated in C++14; Use B instead")]] A;
   10798 [[deprecated("bar is unsafe; use foo() instead")]]
   10799 int bar(int n);
   10800 
   10801 int foo(int n);
   10802 class B;
   10803 #endif
   10804 A aa; // warning: 'A' is deprecated : A is deprecated in C++14; Use B instead
   10805 int j = bar(2); // warning: 'int bar(int)' is deprecated : bar is unsafe; use fo
   10806 o() instead
   10807 
   10808      * G++ supports [17]C++1y digit separators. Long numeric literals can
   10809        be subdivided with a single quote ' to enhance readability:
   10810 
   10811 int i = 1048576;
   10812 int j = 1'048'576;
   10813 int k = 0x10'0000;
   10814 int m = 0'004'000'000;
   10815 int n = 0b0001'0000'0000'0000'0000'0000;
   10816 
   10817 double x = 1.602'176'565e-19;
   10818 double y = 1.602'176'565e-1'9;
   10819 
   10820      * G++ supports [18]C++1y generic (polymorphic) lambdas.
   10821 
   10822 // a functional object that will increment any type
   10823 auto incr = [](auto x) { return x++; };
   10824 
   10825      * As a GNU extension, G++ supports explicit template parameter syntax
   10826        for generic lambdas. This can be combined in the expected way with
   10827        the standard auto syntax.
   10828 
   10829 // a functional object that will add two like-type objects
   10830 auto add = [] <typename T> (T a, T b) { return a + b; };
   10831 
   10832      * G++ supports unconstrained generic functions as specified by 4.1.2
   10833        and 5.1.1 of [19]N3889: Concepts Lite Specification. Briefly, auto
   10834        may be used as a type-specifier in a parameter declaration of any
   10835        function declarator in order to introduce an implicit function
   10836        template parameter, akin to generic lambdas.
   10837 
   10838 // the following two function declarations are equivalent
   10839 auto incr(auto x) { return x++; }
   10840 template <typename T>
   10841 auto incr(T x) { return x++; }
   10842 
   10843     Runtime Library (libstdc++)
   10844 
   10845      * [20]Improved support for C++11, including:
   10846           + support for <regex>;
   10847           + The associative containers in <map> and <set> and the
   10848             unordered associative containers in <unordered_map> and
   10849             <unordered_set> meet the allocator-aware container
   10850             requirements;
   10851      * [21]Improved experimental support for the upcoming ISO C++
   10852        standard, C++14, including:
   10853           + fixing constexpr member functions without const;
   10854           + implementation of the std::exchange() utility function;
   10855           + addressing tuples by type;
   10856           + implemention of std::make_unique;
   10857           + implemention of std::shared_lock;
   10858           + making std::result_of SFINAE-friendly;
   10859           + adding operator() to std::integral_constant;
   10860           + adding user-defined literals for standard library types
   10861             std::basic_string, std::chrono::duration, and std::complex;
   10862           + adding two range overloads to non-modifying sequence oprations
   10863             std::equal and std::mismatch;
   10864           + adding IO manipulators for quoted strings;
   10865           + adding constexpr members to <utility>, <complex>, <chrono>,
   10866             and some containers;
   10867           + adding compile-time std::integer_sequence;
   10868           + adding cleaner transformation traits;
   10869           + making <functional>s operator functors easier to use and more
   10870             generic;
   10871      * An implementation of std::experimental::optional.
   10872      * An implementation of std::experimental::string_view.
   10873      * The non-standard function std::copy_exception has been deprecated
   10874        and will be removed in a future version. std::make_exception_ptr
   10875        should be used instead.
   10876 
   10877   [22]Fortran
   10878 
   10879      * Compatibility notice:
   10880           + Module files: The version of the module files (.mod) has been
   10881             incremented; additionally, module files are now compressed.
   10882             Fortran MODULEs compiled by earlier GCC versions have to be
   10883             recompiled, when they are USEd by files compiled with GCC 4.9.
   10884             GCC 4.9 is not able to read .mod files of earlier GCC
   10885             versions; attempting to do so gives an error message. Note:
   10886             The ABI of the produced assembler data itself has not changed:
   10887             object files and libraries are fully compatible with older
   10888             versions (except as stated below).
   10889           + ABI changes:
   10890                o The [23]argument passing ABI has changed for scalar dummy
   10891                  arguments of type INTEGER, REAL, COMPLEX and LOGICAL,
   10892                  which have both the VALUE and the OPTIONAL attributes.
   10893                o To support finalization the virtual table associated with
   10894                  polymorphic variables has changed. Code containing CLASS
   10895                  should be recompiled, including all files which define
   10896                  derived types involved in the type definition used by
   10897                  polymorphic variables. (Note: Due to the incremented
   10898                  module version, trying to mix old code with new code will
   10899                  usually give an error message.)
   10900           + GNU Fortran no longer deallocates allocatable variables or
   10901             allocatable components of variables declared in the main
   10902             program. Since Fortran 2008, the standard explicitly states
   10903             that variables declared in the Fortran main program
   10904             automatically have the SAVE attribute.
   10905           + When opening files, the close-on-exec flag is set if the
   10906             system supports such a feature. This is generally considered
   10907             good practice these days, but if there is a need to pass file
   10908             descriptors to child processes the parent process must now
   10909             remember to clear the close-on-exec flag by calling fcntl(),
   10910             e.g. via ISO_C_BINDING, before executing the child process.
   10911      * The deprecated command-line option -fno-whole-file has been
   10912        removed. (-fwhole-file is the default since GCC 4.6.)
   10913        -fwhole-file/-fno-whole-file continue to be accepted but do not
   10914        influence the code generation.
   10915      * The compiler no longer unconditionally warns about DO loops with
   10916        zero iterations. This warning is now controlled by the -Wzerotrip
   10917        option, which is implied by -Wall.
   10918      * The new NO_ARG_CHECK attribute of the [24]!GCC$ directive can be
   10919        used to disable the type-kind-rank (TKR) argument check for a dummy
   10920        argument. The feature is similar to ISO/IEC TS 29133:2012's
   10921        TYPE(*), except that it additionally also disables the rank check.
   10922        Variables with NO_ARG_CHECK have to be dummy arguments and may only
   10923        be used as argument to ISO_C_BINDING's C_LOC and as actual argument
   10924        to another NO_ARG_CHECK dummy argument; also the other constraints
   10925        of TYPE(*) apply. The dummy arguments should be declared as scalar
   10926        or assumed-size variable of type type(*) (recommended) - or of type
   10927        integer, real, complex or logical. With NO_ARG_CHECK, a pointer to
   10928        the data without further type or shape information is passed,
   10929        similar to C's void*. Note that also TS 29113's
   10930        type(*),dimension(..) accepts arguments of any type and rank;
   10931        contrary to NO_ARG_CHECK assumed-rank arguments pass an array
   10932        descriptor which contains the array shape and stride of the
   10933        argument.
   10934      * [25]Fortran 2003:
   10935           + Finalization is now supported. It is currently only done for a
   10936             subset of those situations in which it should occur.
   10937           + Experimental support for scalar character components with
   10938             deferred length (i.e. allocatable string length) in derived
   10939             types has been added. (Deferred-length character variables are
   10940             supported since GCC 4.6.)
   10941      * [26]Fortran 2008:
   10942           + When STOP or ERROR STOP are used to terminate the execution
   10943             and any exception (but inexact) is signaling, a warning is
   10944             printed to ERROR_UNIT, indicating which exceptions are
   10945             signaling. The [27]-ffpe-summary= command-line option can be
   10946             used to fine-tune for which exceptions the warning should be
   10947             shown.
   10948           + Rounding on input (READ) is now handled on systems where
   10949             strtod honours the rounding mode. (For output, rounding is
   10950             supported since GCC 4.5.) Note that for input, the compatible
   10951             rounding mode is handled as nearest (i.e., rounding to an even
   10952             least significant [cf. IEC 60559:1989] for a tie, while
   10953             compatible rounds away from zero in that case).
   10954 
   10955   [28]Go
   10956 
   10957      * GCC 4.9 provides a complete implementation of the Go 1.2.1 release.
   10958 
   10959 [29]New Targets and Target Specific Improvements
   10960 
   10961   [30]AArch64
   10962 
   10963      * The ARMv8-A crypto and CRC instructions are now supported through
   10964        intrinsics. These are enabled when the architecture supports these
   10965        and are available through the -march=armv8-a+crc and
   10966        -march=armv8-a+crypto options.
   10967      * Initial support for ILP32 has now been added to the compiler. This
   10968        is now available through the command-line option -mabi=ilp32.
   10969        Support for ILP32 is considered experimental as the ABI
   10970        specification is still beta.
   10971      * Coverage of more of the ISA including the SIMD extensions has been
   10972        added. The Advanced SIMD intrinsics have also been improved.
   10973      * The new local register allocator (LRA) is now on by default for the
   10974        AArch64 back end.
   10975      * The REE (Redundant extension elimination) pass has now been enabled
   10976        by default for the AArch64 back end.
   10977      * Tuning for the Cortex-A53 and Cortex-A57 has been improved.
   10978      * Initial big.LITTLE tuning support for the combination of Cortex-A57
   10979        and Cortex-A53 was added through the -mcpu=cortex-a57.cortex-a53
   10980        option.
   10981      * A number of structural changes have been made to both the ARM and
   10982        AArch64 back ends to facilitate improved code-generation.
   10983      * As of GCC 4.9.2 a workaround for the ARM Cortex-A53 erratum 835769
   10984        has been added and can be enabled by giving the
   10985        -mfix-cortex-a53-835769 option. Alternatively it can be enabled by
   10986        default by configuring GCC with the --enable-fix-cortex-a53-835769
   10987        option.
   10988 
   10989   [31]ARC
   10990 
   10991      * A port for Synopsys Designware ARC has been contributed by Embecosm
   10992        and Synopsys Inc.
   10993 
   10994   [32]ARM
   10995 
   10996      * Use of Advanced SIMD (Neon) for 64-bit scalar computations has been
   10997        disabled by default. This was found to generate better code in only
   10998        a small number of cases. It can be turned back on with the
   10999        -mneon-for-64bits option.
   11000      * Further support for the ARMv8-A architecture, notably implementing
   11001        the restriction around IT blocks in the Thumb32 instruction set has
   11002        been added. The -mrestrict-it option can be used with
   11003        -march=armv7-a or the -march=armv7ve options to make code
   11004        generation fully compatible with the deprecated instructions in
   11005        ARMv8-A.
   11006      * Support has now been added for the ARMv7ve variant of the
   11007        architecture. This can be used by the -march=armv7ve option.
   11008      * The ARMv8-A crypto and CRC instructions are now supported through
   11009        intrinsics and are available through the -march=armv8-a+crc and
   11010        mfpu=crypto-neon-fp-armv8 options.
   11011      * LRA is now on by default for the ARM target. This can be turned off
   11012        using the -mno-lra option. This option is a purely transitionary
   11013        command-line option and will be removed in a future release. We are
   11014        interested in any bug reports regarding functional and performance
   11015        regressions with LRA.
   11016      * A new option -mslow-flash-data to improve performance of programs
   11017        fetching data on slow flash memory has now been introduced for the
   11018        ARMv7-M profile cores.
   11019      * A new option -mpic-data-is-text-relative for targets that allows
   11020        data segments to be relative to text segments has been added. This
   11021        is on by default for all targets except VxWorks RTP.
   11022      * A number of infrastructural changes have been made to both the ARM
   11023        and AArch64 back ends to facilitate improved code-generation.
   11024      * GCC now supports Cortex-A12 and the Cortex-R7 through the
   11025        -mcpu=cortex-a12 and -mcpu=cortex-r7 options.
   11026      * GCC now has tuning for the Cortex-A57 and Cortex-A53 through the
   11027        -mcpu=cortex-a57 and -mcpu=cortex-a53 options.
   11028      * Initial big.LITTLE tuning support for the combination of Cortex-A57
   11029        and Cortex-A53 was added through the -mcpu=cortex-a57.cortex-a53
   11030        option. Similar support was added for the combination of Cortex-A15
   11031        and Cortex-A7 through the -mcpu=cortex-a15.cortex-a7 option.
   11032      * Further performance optimizations for the Cortex-A15 and the
   11033        Cortex-M4 have been added.
   11034      * A number of code generation improvements for Thumb2 to reduce code
   11035        size when compiling for the M-profile processors.
   11036 
   11037   [33]AVR
   11038 
   11039      * A new command-line option -mfract-convert-truncate has been added.
   11040        It allows compiler to use truncation instead of rounding towards
   11041        zero for fractional fixed-point types.
   11042 
   11043   [34]IA-32/x86-64
   11044 
   11045      * -mfpmath=sse is now implied by -ffast-math on all targets where
   11046        SSE2 is supported.
   11047      * Intel AVX-512 support was added to GCC. That includes inline
   11048        assembly support, new registers and extending existing ones, new
   11049        intrinsics (covered by corresponding testsuite), and basic
   11050        autovectorization. AVX-512 instructions are available via the
   11051        following GCC switches: AVX-512 foundation instructions: -mavx512f,
   11052        AVX-512 prefetch instructions: -mavx512pf, AVX-512 exponential and
   11053        reciprocal instructions: -mavx512er, AVX-512 conflict detection
   11054        instructions: -mavx512cd.
   11055      * It is now possible to call x86 intrinsics from select functions in
   11056        a file that are tagged with the corresponding target attribute
   11057        without having to compile the entire file with the -mxxx option.
   11058        This improves the usability of x86 intrinsics and is particularly
   11059        useful when doing [35]Function Multiversioning.
   11060      * GCC now supports the new Intel microarchitecture named Silvermont
   11061        through -march=silvermont.
   11062      * GCC now supports the new Intel microarchitecture named Broadwell
   11063        through -march=broadwell.
   11064      * Optimizing for other Intel microarchitectures have been renamed to
   11065        -march=nehalem, westmere, sandybridge, ivybridge, haswell, bonnell.
   11066      * -march=generic has been retuned for better support of Intel core
   11067        and AMD Bulldozer architectures. Performance of AMD K7, K8, Intel
   11068        Pentium-M, and Pentium4 based CPUs is no longer considered
   11069        important for generic.
   11070      * -mtune=intel can now be used to generate code running well on the
   11071        most current Intel processors, which are Haswell and Silvermont for
   11072        GCC 4.9.
   11073      * Support to encode 32-bit assembly instructions in 16-bit format is
   11074        now available through the -m16 command-line option.
   11075      * Better inlining of memcpy and memset that is aware of value ranges
   11076        and produces shorter alignment prologues.
   11077      * -mno-accumulate-outgoing-args is now honored when unwind
   11078        information is output. Argument accumulation is also now turned off
   11079        for portions of programs optimized for size.
   11080      * Support for new AMD family 15h processors (Excavator core) is now
   11081        available through the -march=bdver4 and -mtune=bdver4 options.
   11082 
   11083   [36]MSP430
   11084 
   11085      * A new command-line option -mcpu= has been added to the MSP430 back
   11086        end. This option is used to specify the ISA to be used. Accepted
   11087        values are msp430 (the default), msp430x and msp430xv2. The ISA is
   11088        no longer deduced from the -mmcu= option as there are far too many
   11089        different MCU names. The -mmcu= option is still supported, and this
   11090        is still used to select linker scripts and generate a C
   11091        preprocessor symbol that will be recognised by the msp430.h header
   11092        file.
   11093 
   11094   [37]NDS32
   11095 
   11096      * A new nds32 port supports the 32-bit architecture from Andes
   11097        Technology Corporation.
   11098      * The port provides initial support for the V2, V3, V3m instruction
   11099        set architectures.
   11100 
   11101   [38]Nios II
   11102 
   11103      * A port for the Altera Nios II has been contributed by Mentor
   11104        Graphics.
   11105 
   11106   [39]PowerPC / PowerPC64 / RS6000
   11107 
   11108      * GCC now supports Power ISA 2.07, which includes support for
   11109        Hardware Transactional Memory (HTM), Quadword atomics and several
   11110        VMX and VSX additions, including Crypto, 64-bit integer, 128-bit
   11111        integer and decimal integer operations.
   11112      * Support for the POWER8 processor is now available through the
   11113        -mcpu=power8 and -mtune=power8 options.
   11114      * The libitm library has been modified to add a HTM fastpath that
   11115        automatically uses POWER's HTM hardware instructions when it is
   11116        executing on a HTM enabled processor.
   11117      * Support for the new powerpc64le-linux platform has been added. It
   11118        defaults to generating code that conforms to the ELFV2 ABI.
   11119 
   11120   S/390, System z
   11121 
   11122      * Support for the Transactional Execution Facility included with the
   11123        IBM zEnterprise zEC12 processor has been added. A set of GCC style
   11124        builtins as well as XLC style builtins are provided. The builtins
   11125        are enabled by default when using the -march=zEC12 option but can
   11126        explicitly be disabled with -mno-htm. Using the GCC builtins also
   11127        libitm supports hardware transactions on S/390.
   11128      * The hotpatch features allows to prepare functions for hotpatching.
   11129        A certain amount of bytes is reserved before the function entry
   11130        label plus a NOP is inserted at its very beginning to implement a
   11131        backward jump when applying a patch. The feature can either be
   11132        enabled per compilation unit via the command-line option -mhotpatch
   11133        or per function using the hotpatch attribute.
   11134      * The shrink wrap optimization is now supported on S/390 and enabled
   11135        by default.
   11136      * A major rework of the routines to determine which registers need to
   11137        be saved and restored in function prologue/epilogue now allow to
   11138        use floating point registers as save slots. This will happen for
   11139        certain leaf function with -march=z10 or higher.
   11140      * The LRA rtl pass replaces reload by default on S/390.
   11141 
   11142   [40]RX
   11143 
   11144      * The port now allows to specify the RX100, RX200, and RX600
   11145        processors with the command-line options -mcpu=rx100, -mcpu=rx200
   11146        and -mcpu=rx600.
   11147 
   11148   [41]SH
   11149 
   11150      * Minor improvements to code generated for integer arithmetic and
   11151        code that involves the T bit.
   11152      * Added support for the SH2A clips and clipu instructions. The
   11153        compiler will now try to utilize them for min/max expressions such
   11154        as max (-128, min (127, x)).
   11155      * Added support for the cmp/str instruction through built-in
   11156        functions such as __builtin_strlen. When not optimizing for size,
   11157        the compiler will now expand calls to e.g. strlen as an inlined
   11158        sequences which utilize the cmp/str instruction.
   11159      * Improved code generated around volatile memory loads and stores.
   11160      * The option -mcbranchdi has been deprecated. Specifying it will
   11161        result in a warning and will not influence code generation.
   11162      * The option -mcmpeqdi has been deprecated. Specifying it will result
   11163        in a warning and will not influence code generation.
   11164 
   11165 [42]GCC 4.9.1
   11166 
   11167    This is the [43]list of problem reports (PRs) from GCC's bug tracking
   11168    system that are known to be fixed in the 4.9.1 release. This list might
   11169    not be complete (that is, it is possible that some PRs that have been
   11170    fixed are not listed here).
   11171 
   11172    Version 4.0 of the OpenMP specification is supported even in Fortran,
   11173    not just C and C++.
   11174 
   11175 [44]GCC 4.9.2
   11176 
   11177    This is the [45]list of problem reports (PRs) from GCC's bug tracking
   11178    system that are known to be fixed in the 4.9.2 release. This list might
   11179    not be complete (that is, it is possible that some PRs that have been
   11180    fixed are not listed here).
   11181 
   11182 [46]GCC 4.9.3
   11183 
   11184    This is the [47]list of problem reports (PRs) from GCC's bug tracking
   11185    system that are known to be fixed in the 4.9.3 release. This list might
   11186    not be complete (that is, it is possible that some PRs that have been
   11187    fixed are not listed here).
   11188 
   11189 [48]GCC 4.9.4
   11190 
   11191    This is the [49]list of problem reports (PRs) from GCC's bug tracking
   11192    system that are known to be fixed in the 4.9.4 release. This list might
   11193    not be complete (that is, it is possible that some PRs that have been
   11194    fixed are not listed here).
   11195 
   11196 
   11197     For questions related to the use of GCC, please consult these web
   11198     pages and the [50]GCC manuals. If that fails, the
   11199     [51]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   11200     web pages and the development of GCC are welcome on our developer
   11201     list at [52]gcc (a] gcc.gnu.org. All of [53]our lists have public
   11202     archives.
   11203 
   11204    Copyright (C) [54]Free Software Foundation, Inc. Verbatim copying and
   11205    distribution of this entire article is permitted in any medium,
   11206    provided this notice is preserved.
   11207 
   11208    These pages are [55]maintained by the GCC team. Last modified
   11209    2025-01-31.
   11210 
   11211 References
   11212 
   11213    1. https://gcc.gnu.org/ml/gcc-patches/2013-05/msg00728.html
   11214    2. https://gcc.gnu.org/PR60825
   11215    3. https://gcc.gnu.org/gcc-4.9/porting_to.html
   11216    4. https://gcc.gnu.org/gcc-4.9/changes.html#languages
   11217    5. https://www.openmp.org/specifications/
   11218    6. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Optimize-Options.html#index-fsimd-cost-model-908
   11219    7. https://gcc.gnu.org/gcc-4.9/changes.html#ada
   11220    8. https://gcc.gnu.org/gcc-4.9/changes.html#c-family
   11221    9. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Language-Independent-Options.html#index-fdiagnostics-color-252
   11222   10. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Loop-Specific-Pragmas.html
   11223   11. https://gcc.gnu.org/gcc-4.9/changes.html#cxx
   11224   12. https://gcc.gnu.org/projects/cxx1y.html
   11225   13. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3638.html
   11226   14. https://gcc.gnu.org/projects/cxx1y.html
   11227   15. https://gcc.gnu.org/projects/cxx1y.html
   11228   16. https://gcc.gnu.org/projects/cxx1y.html
   11229   17. https://gcc.gnu.org/projects/cxx1y.html
   11230   18. https://gcc.gnu.org/projects/cxx1y.html
   11231   19. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3889.pdf
   11232   20. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/libstdc++/manual/manual/status.html#status.iso.2011
   11233   21. https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.2014
   11234   22. https://gcc.gnu.org/gcc-4.9/changes.html#fortran
   11235   23. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gfortran/Argument-passing-conventions.html
   11236   24. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gfortran/GNU-Fortran-Compiler-Directives.html
   11237   25. https://gcc.gnu.org/wiki/Fortran2003Status
   11238   26. https://gcc.gnu.org/wiki/Fortran2008Status
   11239   27. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gfortran/Debugging-Options.html
   11240   28. https://gcc.gnu.org/gcc-4.9/changes.html#go
   11241   29. https://gcc.gnu.org/gcc-4.9/changes.html#targets
   11242   30. https://gcc.gnu.org/gcc-4.9/changes.html#aarch64
   11243   31. https://gcc.gnu.org/gcc-4.9/changes.html#arc
   11244   32. https://gcc.gnu.org/gcc-4.9/changes.html#arm
   11245   33. https://gcc.gnu.org/gcc-4.9/changes.html#avr
   11246   34. https://gcc.gnu.org/gcc-4.9/changes.html#x86
   11247   35. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Function-Multiversioning.html
   11248   36. https://gcc.gnu.org/gcc-4.9/changes.html#msp430
   11249   37. https://gcc.gnu.org/gcc-4.9/changes.html#nds32
   11250   38. https://gcc.gnu.org/gcc-4.9/changes.html#nios2
   11251   39. https://gcc.gnu.org/gcc-4.9/changes.html#powerpc
   11252   40. https://gcc.gnu.org/gcc-4.9/changes.html#rx
   11253   41. https://gcc.gnu.org/gcc-4.9/changes.html#sh
   11254   42. https://gcc.gnu.org/gcc-4.9/changes.html#GCC4.9.1
   11255   43. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.9.1
   11256   44. https://gcc.gnu.org/gcc-4.9/changes.html#GCC4.9.2
   11257   45. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.9.2
   11258   46. https://gcc.gnu.org/gcc-4.9/changes.html#GCC4.9.3
   11259   47. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.9.3
   11260   48. https://gcc.gnu.org/gcc-4.9/changes.html#GCC4.9.4
   11261   49. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.9.4
   11262   50. https://gcc.gnu.org/onlinedocs/
   11263   51. mailto:gcc-help (a] gcc.gnu.org
   11264   52. mailto:gcc (a] gcc.gnu.org
   11265   53. https://gcc.gnu.org/lists.html
   11266   54. https://www.fsf.org/
   11267   55. https://gcc.gnu.org/about.html
   11268 ======================================================================
   11269 http://gcc.gnu.org/gcc-4.8/index.html
   11270 
   11271                              GCC 4.8 Release Series
   11272 
   11273    (This release series is no longer supported.)
   11274 
   11275    June 23, 2015
   11276 
   11277    The [1]GNU project and the GCC developers are pleased to announce the
   11278    release of GCC 4.8.5.
   11279 
   11280    This release is a bug-fix release, containing fixes for regressions in
   11281    GCC 4.8.4 relative to previous releases of GCC.
   11282 
   11283 Release History
   11284 
   11285    GCC 4.8.5
   11286           June 23, 2015 ([2]changes, [3]documentation)
   11287 
   11288    GCC 4.8.4
   11289           December 19, 2014 ([4]changes, [5]documentation)
   11290 
   11291    GCC 4.8.3
   11292           May 22, 2014 ([6]changes, [7]documentation)
   11293 
   11294    GCC 4.8.2
   11295           October 16, 2013 ([8]changes, [9]documentation)
   11296 
   11297    GCC 4.8.1
   11298           May 31, 2013 ([10]changes, [11]documentation)
   11299 
   11300    GCC 4.8.0
   11301           March 22, 2013 ([12]changes, [13]documentation)
   11302 
   11303 References and Acknowledgements
   11304 
   11305    GCC used to stand for the GNU C Compiler, but since the compiler
   11306    supports several other languages aside from C, it now stands for the
   11307    GNU Compiler Collection.
   11308 
   11309    A list of [14]successful builds is updated as new information becomes
   11310    available.
   11311 
   11312    The GCC developers would like to thank the numerous people that have
   11313    contributed new features, improvements, bug fixes, and other changes as
   11314    well as test results to GCC. This [15]amazing group of volunteers is
   11315    what makes GCC successful.
   11316 
   11317    For additional information about GCC please refer to the [16]GCC
   11318    project web site or contact the [17]GCC development mailing list.
   11319 
   11320    To obtain GCC please use [18]our mirror sites or [19]our version
   11321    control system.
   11322 
   11323 
   11324     For questions related to the use of GCC, please consult these web
   11325     pages and the [20]GCC manuals. If that fails, the
   11326     [21]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   11327     web pages and the development of GCC are welcome on our developer
   11328     list at [22]gcc (a] gcc.gnu.org. All of [23]our lists have public
   11329     archives.
   11330 
   11331    Copyright (C) [24]Free Software Foundation, Inc. Verbatim copying and
   11332    distribution of this entire article is permitted in any medium,
   11333    provided this notice is preserved.
   11334 
   11335    These pages are [25]maintained by the GCC team. Last modified
   11336    2022-10-26.
   11337 
   11338 References
   11339 
   11340    1. http://www.gnu.org/
   11341    2. https://gcc.gnu.org/gcc-4.8/changes.html
   11342    3. https://gcc.gnu.org/onlinedocs/4.8.5/
   11343    4. https://gcc.gnu.org/gcc-4.8/changes.html
   11344    5. https://gcc.gnu.org/onlinedocs/4.8.4/
   11345    6. https://gcc.gnu.org/gcc-4.8/changes.html
   11346    7. https://gcc.gnu.org/onlinedocs/4.8.3/
   11347    8. https://gcc.gnu.org/gcc-4.8/changes.html
   11348    9. https://gcc.gnu.org/onlinedocs/4.8.2/
   11349   10. https://gcc.gnu.org/gcc-4.8/changes.html
   11350   11. https://gcc.gnu.org/onlinedocs/4.8.1/
   11351   12. https://gcc.gnu.org/gcc-4.8/changes.html
   11352   13. https://gcc.gnu.org/onlinedocs/4.8.0/
   11353   14. https://gcc.gnu.org/gcc-4.8/buildstat.html
   11354   15. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   11355   16. https://gcc.gnu.org/index.html
   11356   17. mailto:gcc (a] gcc.gnu.org
   11357   18. https://gcc.gnu.org/mirrors.html
   11358   19. https://gcc.gnu.org/git.html
   11359   20. https://gcc.gnu.org/onlinedocs/
   11360   21. mailto:gcc-help (a] gcc.gnu.org
   11361   22. mailto:gcc (a] gcc.gnu.org
   11362   23. https://gcc.gnu.org/lists.html
   11363   24. https://www.fsf.org/
   11364   25. https://gcc.gnu.org/about.html
   11365 ======================================================================
   11366 http://gcc.gnu.org/gcc-4.8/changes.html
   11367 
   11368                              GCC 4.8 Release Series
   11369                         Changes, New Features, and Fixes
   11370 
   11371 Caveats
   11372 
   11373    GCC now uses C++ as its implementation language. This means that to
   11374    build GCC from sources, you will need a C++ compiler that understands
   11375    C++ 2003. For more details on the rationale and specific changes,
   11376    please refer to the [1]C++ conversion page.
   11377 
   11378    To enable the Graphite framework for loop optimizations you now need
   11379    CLooG version 0.18.0 and ISL version 0.11.1. Both can be obtained from
   11380    the [2]GCC infrastructure directory. The installation manual contains
   11381    more information about requirements to build GCC.
   11382 
   11383    GCC now uses a more aggressive analysis to derive an upper bound for
   11384    the number of iterations of loops using constraints imposed by language
   11385    standards. This may cause non-conforming programs to no longer work as
   11386    expected, such as SPEC CPU 2006 464.h264ref and 416.gamess. A new
   11387    option, -fno-aggressive-loop-optimizations, was added to disable this
   11388    aggressive analysis. In some loops that have known constant number of
   11389    iterations, but undefined behavior is known to occur in the loop before
   11390    reaching or during the last iteration, GCC will warn about the
   11391    undefined behavior in the loop instead of deriving lower upper bound of
   11392    the number of iterations for the loop. The warning can be disabled with
   11393    -Wno-aggressive-loop-optimizations.
   11394 
   11395    On ARM, a bug has been fixed in GCC's implementation of the AAPCS rules
   11396    for the layout of vectors that could lead to wrong code being
   11397    generated. Vectors larger than 8 bytes in size are now by default
   11398    aligned to an 8-byte boundary. This is an ABI change: code that makes
   11399    explicit use of vector types may be incompatible with binary objects
   11400    built with older versions of GCC. Auto-vectorized code is not affected
   11401    by this change.
   11402 
   11403    More information on porting to GCC 4.8 from previous versions of GCC
   11404    can be found in the [3]porting guide for this release.
   11405 
   11406 General Optimizer Improvements (and Changes)
   11407 
   11408      * DWARF4 is now the default when generating DWARF debug information.
   11409        When -g is used on a platform that uses DWARF debugging
   11410        information, GCC will now default to -gdwarf-4
   11411        -fno-debug-types-section.
   11412        GDB 7.5, Valgrind 3.8.0 and elfutils 0.154 debug information
   11413        consumers support DWARF4 by default. Before GCC 4.8 the default
   11414        version used was DWARF2. To make GCC 4.8 generate an older DWARF
   11415        version use -g together with -gdwarf-2 or -gdwarf-3. The default
   11416        for Darwin and VxWorks is still -gdwarf-2 -gstrict-dwarf.
   11417      * A new general optimization level, -Og, has been introduced. It
   11418        addresses the need for fast compilation and a superior debugging
   11419        experience while providing a reasonable level of run-time
   11420        performance. Overall experience for development should be better
   11421        than the default optimization level -O0.
   11422      * A new option -ftree-partial-pre was added to control the partial
   11423        redundancy elimination (PRE) optimization. This option is enabled
   11424        by default at the -O3 optimization level, and it makes PRE more
   11425        aggressive.
   11426      * The option -fconserve-space has been removed; it was no longer
   11427        useful on most targets since GCC supports putting variables into
   11428        BSS without making them common.
   11429      * The struct reorg and matrix reorg optimizations (command-line
   11430        options -fipa-struct-reorg and -fipa-matrix-reorg) have been
   11431        removed. They did not always work correctly, nor did they work with
   11432        link-time optimization (LTO), hence were only applicable to
   11433        programs consisting of a single translation unit.
   11434      * Several scalability bottle-necks have been removed from GCC's
   11435        optimization passes. Compilation of extremely large functions, e.g.
   11436        due to the use of the flatten attribute in the "Eigen" C++ linear
   11437        algebra templates library, is significantly faster than previous
   11438        releases of GCC.
   11439      * Link-time optimization (LTO) improvements:
   11440           + LTO partitioning has been rewritten for better reliability and
   11441             maintanibility. Several important bugs leading to link
   11442             failures have been fixed.
   11443      * Interprocedural optimization improvements:
   11444           + A new symbol table has been implemented. It builds on existing
   11445             callgraph and varpool modules and provide a new API. Unusual
   11446             symbol visibilities and aliases are handled more consistently
   11447             leading to, for example, more aggressive unreachable code
   11448             removal with LTO.
   11449           + The inline heuristic can now bypass limits on the size of of
   11450             inlined functions when the inlining is particularly
   11451             profitable. This happens, for example, when loop bounds or
   11452             array strides get propagated.
   11453           + Values passed through aggregates (either by value or
   11454             reference) are now propagated at the inter-procedural level
   11455             leading to better inlining decisions (for example in the case
   11456             of Fortran array descriptors) and devirtualization.
   11457      * [4]AddressSanitizer , a fast memory error detector, has been added
   11458        and can be enabled via -fsanitize=address. Memory access
   11459        instructions will be instrumented to detect heap-, stack-, and
   11460        global-buffer overflow as well as use-after-free bugs. To get nicer
   11461        stacktraces, use -fno-omit-frame-pointer. The AddressSanitizer is
   11462        available on IA-32/x86-64/x32/PowerPC/PowerPC64 GNU/Linux and on
   11463        x86-64 Darwin.
   11464      * [5]ThreadSanitizer has been added and can be enabled via
   11465        -fsanitize=thread. Instructions will be instrumented to detect data
   11466        races. The ThreadSanitizer is available on x86-64 GNU/Linux.
   11467      * A new local register allocator (LRA) has been implemented, which
   11468        replaces the 26 year old reload pass and improves generated code
   11469        quality. For now it is active on the IA-32 and x86-64 targets.
   11470      * Support for transactional memory has been implemented on the
   11471        following architectures: IA-32/x86-64, ARM, PowerPC, SH, SPARC, and
   11472        Alpha.
   11473 
   11474 New Languages and Language specific improvements
   11475 
   11476   C family
   11477 
   11478      * Each diagnostic emitted now includes the original source line and a
   11479        caret '^' indicating the column. The option
   11480        -fno-diagnostics-show-caret suppresses this information.
   11481      * The option -ftrack-macro-expansion=2 is now enabled by default.
   11482        This allows the compiler to display the macro expansion stack in
   11483        diagnostics. Combined with the caret information, an example
   11484        diagnostic showing these two features is:
   11485 
   11486 t.c:1:94: error: invalid operands to binary < (have `struct mystruct' and `float
   11487 ')
   11488  #define MYMAX(A,B)    __extension__ ({ __typeof__(A) __a = (A); __typeof__(B) _
   11489 _b = (B); __a < __b ? __b : __a; })
   11490 
   11491               ^
   11492 t.c:7:7: note: in expansion of macro 'MYMAX'
   11493    X = MYMAX(P, F);
   11494        ^
   11495 
   11496      * A new -Wsizeof-pointer-memaccess warning has been added (also
   11497        enabled by -Wall) to warn about suspicious length parameters to
   11498        certain string and memory built-in functions if the argument uses
   11499        sizeof. This warning warns e.g. about memset (ptr, 0, sizeof
   11500        (ptr)); if ptr is not an array, but a pointer, and suggests a
   11501        possible fix, or about memcpy (&foo, ptr, sizeof (&foo));.
   11502      * The new option -Wpedantic is an alias for -pedantic, which is now
   11503        deprecated. The forms -Wno-pedantic, -Werror=pedantic, and
   11504        -Wno-error=pedantic work in the same way as for any other -W
   11505        option. One caveat is that -Werror=pedantic is not equivalent to
   11506        -pedantic-errors, since the latter makes into errors some warnings
   11507        that are not controlled by -Wpedantic, and the former only affects
   11508        diagnostics that are disabled when using -Wno-pedantic.
   11509      * The option -Wshadow no longer warns if a declaration shadows a
   11510        function declaration, unless the former declares a function or
   11511        pointer to function, because this is [6]a common and valid case in
   11512        real-world code.
   11513 
   11514   [7]C++
   11515 
   11516      * G++ now implements the [8]C++11 thread_local keyword; this differs
   11517        from the GNU __thread keyword primarily in that it allows dynamic
   11518        initialization and destruction semantics. Unfortunately, this
   11519        support requires a run-time penalty for references to
   11520        non-function-local thread_local variables defined in a different
   11521        translation unit even if they don't need dynamic initialization, so
   11522        users may want to continue to use __thread for TLS variables with
   11523        static initialization semantics.
   11524        If the programmer can be sure that no use of the variable in a
   11525        non-defining TU needs to trigger dynamic initialization (either
   11526        because the variable is statically initialized, or a use of the
   11527        variable in the defining TU will be executed before any uses in
   11528        another TU), they can avoid this overhead with the
   11529        -fno-extern-tls-init option.
   11530        OpenMP threadprivate variables now also support dynamic
   11531        initialization and destruction by the same mechanism.
   11532      * G++ now implements the [9]C++11 attribute syntax, e.g.
   11533 
   11534 [[noreturn]] void f();
   11535 
   11536        and also the alignment specifier, e.g.
   11537 
   11538 alignas(double) int i;
   11539 
   11540      * G++ now implements [10]C++11 inheriting constructors, e.g.
   11541 
   11542 struct A { A(int); };
   11543 struct B: A { using A::A; }; // defines B::B(int)
   11544 B b(42); // OK
   11545 
   11546      * As of GCC 4.8.1, G++ implements the change to decltype semantics
   11547        from [11]N3276.
   11548 
   11549 struct A f();
   11550 decltype(f()) g();    // OK, return type of f() is not required to be complete.
   11551 
   11552      * As of GCC 4.8.1, G++ implements [12]C++11 ref-qualifiers, e.g.
   11553 
   11554 struct A { int f() &; };
   11555 int i = A().f();  // error, f() requires an lvalue object
   11556 
   11557      * G++ now supports a -std=c++1y option for experimentation with
   11558        features proposed for the next revision of the standard, expected
   11559        around 2014. Currently the only difference from -std=c++11 is
   11560        support for return type deduction in normal functions, as proposed
   11561        in [13]N3386. Status of C++1y features in GCC 4.8 can be found
   11562        [14]here.
   11563      * The G++ namespace association extension, __attribute ((strong)),
   11564        has been deprecated. Inline namespaces should be used instead.
   11565      * G++ now supports a -fext-numeric-literal option to control whether
   11566        GNU numeric literal suffixes are accepted as extensions or
   11567        processed as C++11 user-defined numeric literal suffixes. The flag
   11568        is on (use suffixes for GNU literals) by default for -std=gnu++*,
   11569        and -std=c++98. The flag is off (use suffixes for user-defined
   11570        literals) by default for -std=c++11 and later.
   11571 
   11572     Runtime Library (libstdc++)
   11573 
   11574      * [15]Improved experimental support for the new ISO C++ standard,
   11575        C++11, including:
   11576           + forward_list meets the allocator-aware container requirements;
   11577           + this_thread::sleep_for(), this_thread::sleep_until() and
   11578             this_thread::yield() are defined without requiring the
   11579             configure option --enable-libstdcxx-time;
   11580      * Improvements to <random>:
   11581           + SSE optimized normal_distribution.
   11582           + Use of hardware RNG instruction for random_device on new x86
   11583             processors (requires the assembler to support the
   11584             instruction.)
   11585        and <ext/random>:
   11586           + New random number engine simd_fast_mersenne_twister_engine
   11587             with an optimized SSE implementation.
   11588           + New random number distributions beta_distribution,
   11589             normal_mv_distribution, rice_distribution,
   11590             nakagami_distribution, pareto_distribution, k_distribution,
   11591             arcsine_distribution, hoyt_distribution.
   11592      * Added --disable-libstdcxx-verbose configure option to disable
   11593        diagnostic messages issued when a process terminates abnormally.
   11594        This may be useful for embedded systems to reduce the size of
   11595        executables that link statically to the library.
   11596 
   11597   [16]Fortran
   11598 
   11599      * Compatibility notice:
   11600           + Module files: The version of module files (.mod) has been
   11601             incremented. Fortran MODULEs compiled by earlier GCC versions
   11602             have to be recompiled, when they are USEd by files compiled
   11603             with GCC 4.8. GCC 4.8 is not able to read .mod files created
   11604             by earlier versions; attempting to do so gives an error
   11605             message.
   11606             Note: The ABI of the produced assembler data itself has not
   11607             changed; object files and libraries are fully compatible with
   11608             older versions except as noted below.
   11609           + ABI: Some internal names (used in the assembler/object file)
   11610             have changed for symbols declared in the specification part of
   11611             a module. If an affected module - or a file using it via use
   11612             association - is recompiled, the module and all files which
   11613             directly use such symbols have to be recompiled as well. This
   11614             change only affects the following kind of module symbols:
   11615                o Procedure pointers. Note: C-interoperable function
   11616                  pointers (type(c_funptr)) are not affected nor are
   11617                  procedure-pointer components.
   11618                o Deferred-length character strings.
   11619      * The [17]BACKTRACE intrinsic subroutine has been added. It shows a
   11620        backtrace at an arbitrary place in user code; program execution
   11621        continues normally afterwards.
   11622      * The [18]-Wc-binding-type warning option has been added (disabled by
   11623        default). It warns if the a variable might not be C interoperable;
   11624        in particular, if the variable has been declared using an intrinsic
   11625        type with default kind instead of using a kind parameter defined
   11626        for C interoperability in the intrinsic ISO_C_Binding module.
   11627        Before, this warning was always printed. The -Wc-binding-type
   11628        option is enabled by -Wall.
   11629      * The [19]-Wrealloc-lhs and -Wrealloc-lhs-all warning command-line
   11630        options have been added, which diagnose when code is inserted for
   11631        automatic (re)allocation of a variable during assignment. This
   11632        option can be used to decide whether it is safe to use
   11633        [20]-fno-realloc-lhs. Additionally, it can be used to find
   11634        automatic (re)allocation in hot loops. (For arrays, replacing
   11635        "var=" by "var(:)=" disables the automatic reallocation.)
   11636      * The [21]-Wcompare-reals command-line option has been added. When
   11637        this is set, warnings are issued when comparing REAL or COMPLEX
   11638        types for equality and inequality; consider replacing a == b by
   11639        abs(a-b) < eps with a suitable eps. -Wcompare-reals is enabled by
   11640        -Wextra.
   11641      * The [22]-Wtarget-lifetime command-line option has been added
   11642        (enabled with -Wall), which warns if the pointer in a pointer
   11643        assignment might outlive its target.
   11644      * Reading floating point numbers which use "q" for the exponential
   11645        (such as 4.0q0) is now supported as vendor extension for better
   11646        compatibility with old data files. It is strongly recommended to
   11647        use for I/O the equivalent but standard conforming "e" (such as
   11648        4.0e0).
   11649        (For Fortran source code, consider replacing the "q" in
   11650        floating-point literals by a kind parameter (e.g. 4.0e0_qp with a
   11651        suitable qp). Note that - in Fortran source code - replacing "q" by
   11652        a simple "e" is not equivalent.)
   11653      * The GFORTRAN_TMPDIR environment variable for specifying a
   11654        non-default directory for files opened with STATUS="SCRATCH", is
   11655        not used anymore. Instead gfortran checks the POSIX/GNU standard
   11656        TMPDIR environment variable. If TMPDIR is not defined, gfortran
   11657        falls back to other methods to determine the directory for
   11658        temporary files as documented in the [23]user manual.
   11659      * [24]Fortran 2003:
   11660           + Support for unlimited polymorphic variables (CLASS(*)) has
   11661             been added. Nonconstant character lengths are not yet
   11662             supported.
   11663      * [25]TS 29113:
   11664           + Assumed types (TYPE(*)) are now supported.
   11665           + Experimental support for assumed-rank arrays (dimension(..))
   11666             has been added. Note that currently gfortran's own array
   11667             descriptor is used, which is different from the one defined in
   11668             TS29113, see [26]gfortran's header file or use the [27]Chasm
   11669             Language Interoperability Tools.
   11670 
   11671   [28]Go
   11672 
   11673      * GCC 4.8.2 provides a complete implementation of the Go 1.1.2
   11674        release.
   11675      * GCC 4.8.0 and 4.8.1 implement a preliminary version of the Go 1.1
   11676        release. The library support is not quite complete.
   11677      * Go has been tested on GNU/Linux and Solaris platforms for various
   11678        processors including x86, x86_64, PowerPC, SPARC, and Alpha. It may
   11679        work on other platforms as well.
   11680 
   11681 [29]New Targets and Target Specific Improvements
   11682 
   11683   [30]AArch64
   11684 
   11685      * A new port has been added to support AArch64, the new 64-bit
   11686        architecture from ARM. Note that this is a separate port from the
   11687        existing 32-bit ARM port.
   11688      * The port provides initial support for the Cortex-A53 and the
   11689        Cortex-A57 processors with the command line options
   11690        -mcpu=cortex-a53 and -mcpu=cortex-a57.
   11691      * As of GCC 4.8.4 a workaround for the ARM Cortex-A53 erratum 835769
   11692        has been added and can be enabled by giving the
   11693        -mfix-cortex-a53-835769 option. Alternatively it can be enabled by
   11694        default by configuring GCC with the --enable-fix-cortex-a53-835769
   11695        option.
   11696 
   11697   [31]ARM
   11698 
   11699      * Initial support has been added for the AArch32 extensions defined
   11700        in the ARMv8 architecture.
   11701      * Code generation improvements for the Cortex-A7 and Cortex-A15 CPUs.
   11702      * A new option, -mcpu=marvell-pj4, has been added to generate code
   11703        for the Marvell PJ4 processor.
   11704      * The compiler can now automatically generate the VFMA, VFMS, REVSH
   11705        and REV16 instructions.
   11706      * A new vectorizer cost model for Advanced SIMD configurations to
   11707        improve the auto-vectorization strategies used.
   11708      * The scheduler now takes into account the number of live registers
   11709        to reduce the amount of spilling that can occur. This should
   11710        improve code performance in large functions. The limit can be
   11711        removed by using the option -fno-sched-pressure.
   11712      * Improvements have been made to the Marvell iWMMX code generation
   11713        and support for the iWMMX2 SIMD unit has been added. The option
   11714        -mcpu=iwmmxt2 can be used to enable code generation for the latter.
   11715      * A number of code generation improvements for Thumb2 to reduce code
   11716        size when compiling for the M-profile processors.
   11717      * The RTEMS (arm-rtems) port has been updated to use the EABI.
   11718      * Code generation support for the old FPA and Maverick floating-point
   11719        architectures has been removed. Ports that previously relied on
   11720        these features have also been removed. This includes the targets:
   11721           + arm*-*-linux-gnu (use arm*-*-linux-gnueabi)
   11722           + arm*-*-elf (use arm*-*-eabi)
   11723           + arm*-*-uclinux* (use arm*-*-uclinux*eabi)
   11724           + arm*-*-ecos-elf (no alternative)
   11725           + arm*-*-freebsd (no alternative)
   11726           + arm*-wince-pe* (no alternative).
   11727 
   11728   [32]AVR
   11729 
   11730      * Support for the command-line option -mshort-calls has been removed.
   11731        It was deprecated in GCC 4.7.
   11732      * The configure option --with-avrlibc supported since GCC 4.7.2 is
   11733        turned on per default for all non-RTEMS configurations. This option
   11734        arranges for a better integration of [33]AVR-LibC with avr-gcc. For
   11735        technical details, see [34]PR54461. To turn off the option in
   11736        non-AVR-LibC configurations, use --with-avrlibc=no. If the compiler
   11737        is configured for RTEMS, the option is always turned off.
   11738      * Support for the "Embedded C" fixed-point has been added. For
   11739        details, see the [35]GCC wiki and the [36]user manual. The support
   11740        is not complete.
   11741      * A new print modifier %r for register operands in inline assembler
   11742        is supported. It will print the raw register number without the
   11743        register prefix 'r':
   11744     /* Return the most significant byte of 'val', a 64-bit value.  */
   11745 
   11746     unsigned char msb (long long val)
   11747     {
   11748       unsigned char c;
   11749       __asm__ ("mov %0, %r1+7" : "=r" (c) : "r" (val));
   11750       return c;
   11751     }
   11752        The inline assembler in this example will generate code like
   11753     mov r24, 8+7
   11754        provided c is allocated to R24 and val is allocated to R8...R15.
   11755        This works because the GNU assembler accepts plain register numbers
   11756        without register prefix.
   11757      * Static initializers with 3-byte symbols are supported now:
   11758     extern const __memx char foo;
   11759     const __memx void *pfoo = &foo;
   11760        This requires at least Binutils 2.23.
   11761 
   11762   IA-32/x86-64
   11763 
   11764      * Allow -mpreferred-stack-boundary=3 for the x86-64 architecture with
   11765        SSE extensions disabled. Since the x86-64 ABI requires 16 byte
   11766        stack alignment, this is ABI incompatible and intended to be used
   11767        in controlled environments where stack space is an important
   11768        limitation. This option will lead to wrong code when functions
   11769        compiled with 16 byte stack alignment (such as functions from a
   11770        standard library) are called with misaligned stack. In this case,
   11771        SSE instructions may lead to misaligned memory access traps. In
   11772        addition, variable arguments will be handled incorrectly for 16
   11773        byte aligned objects (including x87 long double and __int128),
   11774        leading to wrong results. You must build all modules with
   11775        -mpreferred-stack-boundary=3, including any libraries. This
   11776        includes the system libraries and startup modules.
   11777      * Support for the new Intel processor codename Broadwell with RDSEED,
   11778        ADCX, ADOX, PREFETCHW is available through -madx, -mprfchw,
   11779        -mrdseed command-line options.
   11780      * Support for the Intel RTM and HLE intrinsics, built-in functions
   11781        and code generation is available via -mrtm and -mhle.
   11782      * Support for the Intel FXSR, XSAVE and XSAVEOPT instruction sets.
   11783        Intrinsics and built-in functions are available via -mfxsr, -mxsave
   11784        and -mxsaveopt respectively.
   11785      * New -maddress-mode=[short|long] options for x32.
   11786        -maddress-mode=short overrides default 64-bit addresses to 32-bit
   11787        by emitting the 0x67 address-size override prefix. This is the
   11788        default address mode for x32.
   11789      * New built-in functions to detect run-time CPU type and ISA:
   11790           + A built-in function __builtin_cpu_is has been added to detect
   11791             if the run-time CPU is of a particular type. It returns a
   11792             positive integer on a match and zero otherwise. It accepts one
   11793             string literal argument, the CPU name. For example,
   11794             __builtin_cpu_is("westmere") returns a positive integer if the
   11795             run-time CPU is an Intel Core i7 Westmere processor. Please
   11796             refer to the [37]user manual for the list of valid CPU names
   11797             recognized.
   11798           + A built-in function __builtin_cpu_supports has been added to
   11799             detect if the run-time CPU supports a particular ISA feature.
   11800             It returns a positive integer on a match and zero otherwise.
   11801             It accepts one string literal argument, the ISA feature. For
   11802             example, __builtin_cpu_supports("ssse3") returns a positive
   11803             integer if the run-time CPU supports SSSE3 instructions.
   11804             Please refer to the [38]user manual for the list of valid ISA
   11805             names recognized.
   11806        Caveat: If these built-in functions are called before any static
   11807        constructors are invoked, like during IFUNC initialization, then
   11808        the CPU detection initialization must be explicitly run using this
   11809        newly provided built-in function, __builtin_cpu_init. The
   11810        initialization needs to be done only once. For example, this is how
   11811        the invocation would look like inside an IFUNC initializer:
   11812     static void (*some_ifunc_resolver(void))(void)
   11813     {
   11814       __builtin_cpu_init();
   11815       if (__builtin_cpu_is("amdfam10h") ...
   11816       if (__builtin_cpu_supports("popcnt") ...
   11817     }
   11818 
   11819      * Function Multiversioning Support with G++:
   11820        It is now possible to create multiple function versions each
   11821        targeting a specific processor and/or ISA. Function versions have
   11822        the same signature but different target attributes. For example,
   11823        here is a program with function versions:
   11824     __attribute__ ((target ("default")))
   11825     int foo(void)
   11826     {
   11827       return 1;
   11828     }
   11829 
   11830     __attribute__ ((target ("sse4.2")))
   11831     int foo(void)
   11832     {
   11833       return 2;
   11834     }
   11835 
   11836     int main (void)
   11837     {
   11838       int (*p) = &foo;
   11839       assert ((*p)() == foo());
   11840       return 0;
   11841     }
   11842 
   11843        Please refer to this [39]wiki for more information.
   11844      * The x86 back end has been improved to allow option -fschedule-insns
   11845        to work reliably. This option can be used to schedule instructions
   11846        better and leads to improved performace in certain cases.
   11847      * Windows MinGW-w64 targets (*-w64-mingw*) require at least r5437
   11848        from the Mingw-w64 trunk.
   11849      * Support for new AMD family 15h processors (Steamroller core) is now
   11850        available through the -march=bdver3 and -mtune=bdver3 options.
   11851      * Support for new AMD family 16h processors (Jaguar core) is now
   11852        available through the -march=btver2 and -mtune=btver2 options.
   11853 
   11854   [40]FRV
   11855 
   11856      * This target now supports the -fstack-usage command-line option.
   11857 
   11858   [41]MIPS
   11859 
   11860      * GCC can now generate code specifically for the R4700, Broadcom XLP
   11861        and MIPS 34kn processors. The associated -march options are
   11862        -march=r4700, -march=xlp and -march=34kn respectively.
   11863      * GCC now generates better DSP code for MIPS 74k cores thanks to
   11864        further scheduling optimizations.
   11865      * The MIPS port now supports the -fstack-check option.
   11866      * GCC now passes the -mmcu and -mno-mcu options to the assembler.
   11867      * Previous versions of GCC would silently accept -fpic and -fPIC for
   11868        -mno-abicalls targets like mips*-elf. This combination was not
   11869        intended or supported, and did not generate position-independent
   11870        code. GCC 4.8 now reports an error when this combination is used.
   11871 
   11872   [42]PowerPC / PowerPC64 / RS6000
   11873 
   11874      * SVR4 configurations (GNU/Linux, FreeBSD, NetBSD) no longer save,
   11875        restore or update the VRSAVE register by default. The respective
   11876        operating systems manage the VRSAVE register directly.
   11877      * Large TOC support has been added for AIX through the command line
   11878        option -mcmodel=large.
   11879      * Native Thread-Local Storage support has been added for AIX.
   11880      * VMX (Altivec) and VSX instruction sets now are enabled implicitly
   11881        when targetting processors that support those hardware features on
   11882        AIX 6.1 and above.
   11883 
   11884   [43]RX
   11885 
   11886      * This target will now issue a warning message whenever multiple fast
   11887        interrupt handlers are found in the same compilation unit. This
   11888        feature can be turned off by the new
   11889        -mno-warn-multiple-fast-interrupts command-line option.
   11890 
   11891   S/390, System z
   11892 
   11893      * Support for the IBM zEnterprise zEC12 processor has been added.
   11894        When using the -march=zEC12 option, the compiler will generate code
   11895        making use of the following new instructions:
   11896           + load and trap instructions
   11897           + 2 new compare and trap instructions
   11898           + rotate and insert selected bits - without CC clobber
   11899        The -mtune=zEC12 option enables zEC12 specific instruction
   11900        scheduling without making use of new instructions.
   11901      * Register pressure sensitive instruction scheduling is enabled by
   11902        default.
   11903      * The ifunc function attribute is enabled by default.
   11904      * memcpy and memcmp invokations on big memory chunks or with run time
   11905        lengths are not generated inline anymore when tuning for z10 or
   11906        higher. The purpose is to make use of the IFUNC optimized versions
   11907        in Glibc.
   11908 
   11909   [44]SH
   11910 
   11911      * The default alignment settings have been reduced to be less
   11912        aggressive. This results in more compact code for optimization
   11913        levels other than -Os.
   11914      * Improved support for the __atomic built-in functions:
   11915           + A new option -matomic-model=model selects the model for the
   11916             generated atomic sequences. The following models are
   11917             supported:
   11918 
   11919               soft-gusa
   11920                       Software gUSA sequences (SH3* and SH4* only). On
   11921                       SH4A targets this will now also partially utilize
   11922                       the movco.l and movli.l instructions. This is the
   11923                       default when the target is sh3*-*-linux* or
   11924                       sh4*-*-linux*.
   11925 
   11926               hard-llcs
   11927                       Hardware movco.l / movli.l sequences (SH4A only).
   11928 
   11929               soft-tcb
   11930                       Software thread control block sequences.
   11931 
   11932               soft-imask
   11933                       Software interrupt flipping sequences (privileged
   11934                       mode only). This is the default when the target is
   11935                       sh1*-*-linux* or sh2*-*-linux*.
   11936 
   11937               none
   11938                       Generates function calls to the respective __atomic
   11939                       built-in functions. This is the default for SH64
   11940                       targets or when the target is not sh*-*-linux*.
   11941 
   11942           + The option -msoft-atomic has been deprecated. It is now an
   11943             alias for -matomic-model=soft-gusa.
   11944           + A new option -mtas makes the compiler generate the tas.b
   11945             instruction for the __atomic_test_and_set built-in function
   11946             regardless of the selected atomic model.
   11947           + The __sync functions in libgcc now reflect the selected atomic
   11948             model when building the toolchain.
   11949      * Added support for the mov.b and mov.w instructions with
   11950        displacement addressing.
   11951      * Added support for the SH2A instructions movu.b and movu.w.
   11952      * Various improvements to code generated for integer arithmetic.
   11953      * Improvements to conditional branches and code that involves the T
   11954        bit. A new option -mzdcbranch tells the compiler to favor
   11955        zero-displacement branches. This is enabled by default for SH4*
   11956        targets.
   11957      * The pref instruction will now be emitted by the __builtin_prefetch
   11958        built-in function for SH3* targets.
   11959      * The fmac instruction will now be emitted by the fmaf standard
   11960        function and the __builtin_fmaf built-in function.
   11961      * The -mfused-madd option has been deprecated in favor of the
   11962        machine-independent -ffp-contract option. Notice that the fmac
   11963        instruction will now be generated by default for expressions like a
   11964        * b + c. This is due to the compiler default setting
   11965        -ffp-contract=fast.
   11966      * Added new options -mfsrra and -mfsca to allow the compiler using
   11967        the fsrra and fsca instructions on targets other than SH4A (where
   11968        they are already enabled by default).
   11969      * Added support for the __builtin_bswap32 built-in function. It is
   11970        now expanded as a sequence of swap.b and swap.w instructions
   11971        instead of a library function call.
   11972      * The behavior of the -mieee option has been fixed and the negative
   11973        form -mno-ieee has been added to control the IEEE conformance of
   11974        floating point comparisons. By default -mieee is now enabled and
   11975        the option -ffinite-math-only implicitly sets -mno-ieee.
   11976      * Added support for the built-in functions __builtin_thread_pointer
   11977        and __builtin_set_thread_pointer. This assumes that GBR is used to
   11978        hold the thread pointer of the current thread. Memory loads and
   11979        stores relative to the address returned by __builtin_thread_pointer
   11980        will now also utilize GBR based displacement address modes.
   11981      * The -mdiv= option for targets other than SHmedia has been fixed and
   11982        documented.
   11983 
   11984   [45]SPARC
   11985 
   11986      * Added optimized instruction scheduling for Niagara4.
   11987 
   11988   [46]TILE-Gx
   11989 
   11990      * Added support for the -mcmodel=MODEL command-line option. The
   11991        models supported are small and large.
   11992 
   11993   [47]V850
   11994 
   11995      * This target now supports the E3V5 architecture via the use of the
   11996        new -mv850e3v5 command-line option. It also has experimental
   11997        support for the e3v5 LOOP instruction which can be enabled via the
   11998        new -mloop command-line option.
   11999 
   12000   [48]XStormy16
   12001 
   12002      * This target now supports the -fstack-usage command-line option.
   12003 
   12004 [49]Operating Systems
   12005 
   12006   [50]OpenBSD
   12007 
   12008      * Support for OpenBSD/amd64 (x86_64-*-openbsd*) has been added and
   12009        support for OpenBSD/i386 (i386-*-openbsd*) has been rejuvenated.
   12010 
   12011   [51]Windows (Cygwin)
   12012 
   12013      * Executables are now linked against shared libgcc by default. The
   12014        previous default was to link statically, which can still be done by
   12015        explicitly specifying -static or static-libgcc on the command line.
   12016        However it is strongly advised against, as it will cause problems
   12017        for any application that makes use of DLLs compiled by GCC. It
   12018        should be alright for a monolithic stand-alone application that
   12019        only links against the Windows DLLs, but offers little or no
   12020        benefit.
   12021 
   12022 [52]GCC 4.8.1
   12023 
   12024    This is the [53]list of problem reports (PRs) from GCC's bug tracking
   12025    system that are known to be fixed in the 4.8.1 release. This list might
   12026    not be complete (that is, it is possible that some PRs that have been
   12027    fixed are not listed here).
   12028 
   12029    The C++11 <chrono> std::chrono::system_clock and
   12030    std::chrono::steady_clock classes have changed ABI in GCC 4.8.1, they
   12031    both are now separate (never typedefs of each other), both use
   12032    std::chrono::nanoseconds resolution, on most GNU/Linux configurations
   12033    std::chrono::steady_clock is now finally monotonic, and both classes
   12034    are mangled differently than in the previous GCC releases.
   12035    std::chrono::system_clock::now() with std::chrono::microseconds resp.
   12036    std::chrono::seconds resolution is still exported for backwards
   12037    compatibility with default configured libstdc++. Note that libstdc++
   12038    configured with --enable-libstdcxx-time= used to be ABI incompatible
   12039    with default configured libstdc++ for those two classes and no ABI
   12040    compatibility can be offered for those configurations, so any C++11
   12041    code that uses those classes and has been compiled and linked against
   12042    libstdc++ configured with the non-default --enable-libstdcxx-time=
   12043    configuration option needs to be recompiled.
   12044 
   12045 [54]GCC 4.8.2
   12046 
   12047    This is the [55]list of problem reports (PRs) from GCC's bug tracking
   12048    system that are known to be fixed in the 4.8.2 release. This list might
   12049    not be complete (that is, it is possible that some PRs that have been
   12050    fixed are not listed here).
   12051 
   12052 [56]GCC 4.8.3
   12053 
   12054    This is the [57]list of problem reports (PRs) from GCC's bug tracking
   12055    system that are known to be fixed in the 4.8.3 release. This list might
   12056    not be complete (that is, it is possible that some PRs that have been
   12057    fixed are not listed here).
   12058 
   12059    Support for the new powerpc64le-linux platform has been added. It
   12060    defaults to generating code that conforms to the ELFV2 ABI.
   12061 
   12062 [58]GCC 4.8.4
   12063 
   12064    This is the [59]list of problem reports (PRs) from GCC's bug tracking
   12065    system that are known to be fixed in the 4.8.4 release. This list might
   12066    not be complete (that is, it is possible that some PRs that have been
   12067    fixed are not listed here).
   12068 
   12069 [60]GCC 4.8.5
   12070 
   12071    This is the [61]list of problem reports (PRs) from GCC's bug tracking
   12072    system that are known to be fixed in the 4.8.5 release. This list might
   12073    not be complete (that is, it is possible that some PRs that have been
   12074    fixed are not listed here).
   12075 
   12076 
   12077     For questions related to the use of GCC, please consult these web
   12078     pages and the [62]GCC manuals. If that fails, the
   12079     [63]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   12080     web pages and the development of GCC are welcome on our developer
   12081     list at [64]gcc (a] gcc.gnu.org. All of [65]our lists have public
   12082     archives.
   12083 
   12084    Copyright (C) [66]Free Software Foundation, Inc. Verbatim copying and
   12085    distribution of this entire article is permitted in any medium,
   12086    provided this notice is preserved.
   12087 
   12088    These pages are [67]maintained by the GCC team. Last modified
   12089    2025-02-28.
   12090 
   12091 References
   12092 
   12093    1. https://gcc.gnu.org/wiki/cxx-conversion
   12094    2. ftp://gcc.gnu.org/pub/gcc/infrastructure/
   12095    3. https://gcc.gnu.org/gcc-4.8/porting_to.html
   12096    4. https://github.com/google/sanitizers
   12097    5. https://code.google.com/archive/p/data-race-test/wikis/ThreadSanitizer.wiki
   12098    6. https://lkml.org/lkml/2006/11/28/239
   12099    7. https://gcc.gnu.org/gcc-4.8/changes.html#cxx
   12100    8. https://gcc.gnu.org/gcc-4.8/cxx0x_status.html
   12101    9. https://gcc.gnu.org/gcc-4.8/cxx0x_status.html
   12102   10. https://gcc.gnu.org/gcc-4.8/cxx0x_status.html
   12103   11. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3276.pdf
   12104   12. https://gcc.gnu.org/gcc-4.8/cxx0x_status.html
   12105   13. https://www.open-std.org/JTC1/SC22/WG21/docs/papers/2012/n3386.html
   12106   14. https://gcc.gnu.org/projects/cxx1y.html
   12107   15. https://gcc.gnu.org/onlinedocs/gcc-4.8.4/libstdc++/manual/manual/status.html#status.iso.2011
   12108   16. https://gcc.gnu.org/gcc-4.8/changes.html#fortran
   12109   17. https://gcc.gnu.org/onlinedocs/gfortran/BACKTRACE.html
   12110   18. https://gcc.gnu.org/onlinedocs/gfortran/Error-and-Warning-Options.html
   12111   19. https://gcc.gnu.org/onlinedocs/gfortran/Error-and-Warning-Options.html
   12112   20. https://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html
   12113   21. https://gcc.gnu.org/onlinedocs/gfortran/Error-and-Warning-Options.html
   12114   22. https://gcc.gnu.org/onlinedocs/gfortran/Error-and-Warning-Options.html
   12115   23. https://gcc.gnu.org/onlinedocs/gfortran/TMPDIR.html
   12116   24. https://gcc.gnu.org/wiki/Fortran2003Status
   12117   25. https://gcc.gnu.org/wiki/TS29113Status
   12118   26. https://gcc.gnu.org/git/?p=gcc.git;a=blob;f=libgfortran/libgfortran.h
   12119   27. https://chasm-interop.sourceforge.net/
   12120   28. https://gcc.gnu.org/gcc-4.8/changes.html#go
   12121   29. https://gcc.gnu.org/gcc-4.8/changes.html#targets
   12122   30. https://gcc.gnu.org/gcc-4.8/changes.html#aarch64
   12123   31. https://gcc.gnu.org/gcc-4.8/changes.html#arm
   12124   32. https://gcc.gnu.org/gcc-4.8/changes.html#avr
   12125   33. http://www.nongnu.org/avr-libc/
   12126   34. https://gcc.gnu.org/PR54461
   12127   35. https://gcc.gnu.org/wiki/avr-gcc#Fixed-Point_Support
   12128   36. https://gcc.gnu.org/onlinedocs/gcc/Fixed-Point.html
   12129   37. https://gcc.gnu.org/onlinedocs/gcc/x86-Built-in-Functions.html
   12130   38. https://gcc.gnu.org/onlinedocs/gcc/x86-Built-in-Functions.html
   12131   39. https://gcc.gnu.org/wiki/FunctionMultiVersioning
   12132   40. https://gcc.gnu.org/gcc-4.8/changes.html#frv
   12133   41. https://gcc.gnu.org/gcc-4.8/changes.html#mips
   12134   42. https://gcc.gnu.org/gcc-4.8/changes.html#powerpc
   12135   43. https://gcc.gnu.org/gcc-4.8/changes.html#rx
   12136   44. https://gcc.gnu.org/gcc-4.8/changes.html#sh
   12137   45. https://gcc.gnu.org/gcc-4.8/changes.html#sparc
   12138   46. https://gcc.gnu.org/gcc-4.8/changes.html#tilegx
   12139   47. https://gcc.gnu.org/gcc-4.8/changes.html#v850
   12140   48. https://gcc.gnu.org/gcc-4.8/changes.html#xstormy16
   12141   49. https://gcc.gnu.org/gcc-4.8/changes.html#os
   12142   50. https://gcc.gnu.org/gcc-4.8/changes.html#openbsd
   12143   51. https://gcc.gnu.org/gcc-4.8/changes.html#windows
   12144   52. https://gcc.gnu.org/gcc-4.8/changes.html#GCC4.8.1
   12145   53. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.8.1
   12146   54. https://gcc.gnu.org/gcc-4.8/changes.html#GCC4.8.2
   12147   55. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.8.2
   12148   56. https://gcc.gnu.org/gcc-4.8/changes.html#GCC4.8.3
   12149   57. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.8.3
   12150   58. https://gcc.gnu.org/gcc-4.8/changes.html#GCC4.8.4
   12151   59. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.8.4
   12152   60. https://gcc.gnu.org/gcc-4.8/changes.html#GCC4.8.5
   12153   61. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.8.5
   12154   62. https://gcc.gnu.org/onlinedocs/
   12155   63. mailto:gcc-help (a] gcc.gnu.org
   12156   64. mailto:gcc (a] gcc.gnu.org
   12157   65. https://gcc.gnu.org/lists.html
   12158   66. https://www.fsf.org/
   12159   67. https://gcc.gnu.org/about.html
   12160 ======================================================================
   12161 http://gcc.gnu.org/gcc-4.7/index.html
   12162 
   12163                              GCC 4.7 Release Series
   12164 
   12165    (This release series is no longer supported.)
   12166 
   12167    June 12, 2014
   12168 
   12169    The [1]GNU project and the GCC developers are pleased to announce the
   12170    release of GCC 4.7.4.
   12171 
   12172    This release is a bug-fix release, containing fixes for regressions in
   12173    GCC 4.7.3 relative to previous releases of GCC.
   12174 
   12175 Release History
   12176 
   12177    GCC 4.7.4
   12178           June 12, 2014 ([2]changes, [3]documentation)
   12179 
   12180    GCC 4.7.3
   12181           April 11, 2013 ([4]changes, [5]documentation)
   12182 
   12183    GCC 4.7.2
   12184           September 20, 2012 ([6]changes, [7]documentation)
   12185 
   12186    GCC 4.7.1
   12187           June 14, 2012 ([8]changes, [9]documentation)
   12188 
   12189    GCC 4.7.0
   12190           March 22, 2012 ([10]changes, [11]documentation)
   12191 
   12192 References and Acknowledgements
   12193 
   12194    GCC used to stand for the GNU C Compiler, but since the compiler
   12195    supports several other languages aside from C, it now stands for the
   12196    GNU Compiler Collection.
   12197 
   12198    A list of [12]successful builds is updated as new information becomes
   12199    available.
   12200 
   12201    The GCC developers would like to thank the numerous people that have
   12202    contributed new features, improvements, bug fixes, and other changes as
   12203    well as test results to GCC. This [13]amazing group of volunteers is
   12204    what makes GCC successful.
   12205 
   12206    For additional information about GCC please refer to the [14]GCC
   12207    project web site or contact the [15]GCC development mailing list.
   12208 
   12209    To obtain GCC please use [16]our mirror sites or [17]our version
   12210    control system.
   12211 
   12212 
   12213     For questions related to the use of GCC, please consult these web
   12214     pages and the [18]GCC manuals. If that fails, the
   12215     [19]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   12216     web pages and the development of GCC are welcome on our developer
   12217     list at [20]gcc (a] gcc.gnu.org. All of [21]our lists have public
   12218     archives.
   12219 
   12220    Copyright (C) [22]Free Software Foundation, Inc. Verbatim copying and
   12221    distribution of this entire article is permitted in any medium,
   12222    provided this notice is preserved.
   12223 
   12224    These pages are [23]maintained by the GCC team. Last modified
   12225    2022-10-26.
   12226 
   12227 References
   12228 
   12229    1. http://www.gnu.org/
   12230    2. https://gcc.gnu.org/gcc-4.7/changes.html
   12231    3. https://gcc.gnu.org/onlinedocs/4.7.4/
   12232    4. https://gcc.gnu.org/gcc-4.7/changes.html
   12233    5. https://gcc.gnu.org/onlinedocs/4.7.3/
   12234    6. https://gcc.gnu.org/gcc-4.7/changes.html
   12235    7. https://gcc.gnu.org/onlinedocs/4.7.2/
   12236    8. https://gcc.gnu.org/gcc-4.7/changes.html
   12237    9. https://gcc.gnu.org/onlinedocs/4.7.1/
   12238   10. https://gcc.gnu.org/gcc-4.7/changes.html
   12239   11. https://gcc.gnu.org/onlinedocs/4.7.0/
   12240   12. https://gcc.gnu.org/gcc-4.7/buildstat.html
   12241   13. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   12242   14. https://gcc.gnu.org/index.html
   12243   15. mailto:gcc (a] gcc.gnu.org
   12244   16. https://gcc.gnu.org/mirrors.html
   12245   17. https://gcc.gnu.org/git.html
   12246   18. https://gcc.gnu.org/onlinedocs/
   12247   19. mailto:gcc-help (a] gcc.gnu.org
   12248   20. mailto:gcc (a] gcc.gnu.org
   12249   21. https://gcc.gnu.org/lists.html
   12250   22. https://www.fsf.org/
   12251   23. https://gcc.gnu.org/about.html
   12252 ======================================================================
   12253 http://gcc.gnu.org/gcc-4.7/changes.html
   12254 
   12255                              GCC 4.7 Release Series
   12256                         Changes, New Features, and Fixes
   12257 
   12258 Caveats
   12259 
   12260      * The -fconserve-space flag has been deprecated. The flag had no
   12261        effect for most targets: only targets without a global .bss section
   12262        and without support for switchable sections. Furthermore, the flag
   12263        only had an effect for G++, where it could result in wrong
   12264        semantics (please refer to the GCC manual for further details). The
   12265        flag will be removed in GCC 4.8
   12266      * Support for a number of older systems and recently unmaintained or
   12267        untested target ports of GCC has been declared obsolete in GCC 4.7.
   12268        Unless there is activity to revive them, the next release of GCC
   12269        will have their sources permanently removed.
   12270        All GCC ports for the following processor architectures have been
   12271        declared obsolete:
   12272           + picoChip (picochip-*)
   12273        The following ports for individual systems on particular
   12274        architectures have been obsoleted:
   12275           + IRIX 6.5 (mips-sgi-irix6.5)
   12276           + MIPS OpenBSD (mips*-*-openbsd*)
   12277           + Solaris 8 (*-*-solaris2.8). Details can be found in the
   12278             [1]announcement.
   12279           + Tru64 UNIX V5.1 (alpha*-dec-osf5.1*)
   12280      * On ARM, when compiling for ARMv6 (but not ARMv6-M), ARMv7-A,
   12281        ARMv7-R, or ARMv7-M, the new option -munaligned-access is active by
   12282        default, which for some sources generates code that accesses memory
   12283        on unaligned addresses. This requires the kernel of those systems
   12284        to enable such accesses (controlled by CP15 register c1, refer to
   12285        ARM documentation). Alternatively, or for compatibility with
   12286        kernels where unaligned accesses are not supported, all code has to
   12287        be compiled with -mno-unaligned-access. Upstream Linux kernel
   12288        releases have automatically and unconditionally supported unaligned
   12289        accesses as emitted by GCC due to this option being active since
   12290        version 2.6.28.
   12291      * Support on ARM for the legacy floating-point accelerator (FPA) and
   12292        the mixed-endian floating-point format that it used has been
   12293        obsoleted. The ports that still use this format have been obsoleted
   12294        as well. Many legacy ARM ports already provide an alternative that
   12295        uses the VFP floating-point format. The obsolete ports will be
   12296        deleted in the next release.
   12297        The obsolete ports with alternatives are:
   12298           + arm*-*-rtems (use arm*-*-rtemseabi)
   12299           + arm*-*-linux-gnu (use arm*-*-linux-gnueabi)
   12300           + arm*-*-elf (use arm*-*-eabi)
   12301           + arm*-*-uclinux* (use arm*-*-uclinux*eabi)
   12302        Note, however, that these alternatives are not binary compatible
   12303        with their legacy counterparts (although some can support running
   12304        legacy applications).
   12305        The obsolete ports that currently lack a modern alternative are:
   12306           + arm*-*-ecos-elf
   12307           + arm*-*-freebsd
   12308           + arm*-wince-pe*
   12309        New ports that support more recent versions of the architecture are
   12310        welcome.
   12311      * Support for the Maverick co-processor on ARM has been obsoleted.
   12312        Code to support it will be deleted in the next release.
   12313      * Support has been removed for Unix International threads on Solaris
   12314        2, so the --enable-threads=solaris configure option and the
   12315        -threads compiler option don't work any longer.
   12316      * Support has been removed for the Solaris BSD Compatibility Package,
   12317        which lives in /usr/ucbinclude and /usr/ucblib. It has been removed
   12318        from Solaris 11, and was only intended as a migration aid from
   12319        SunOS 4 to SunOS 5. The -compat-bsd compiler option is not
   12320        recognized any longer.
   12321      * The ARM port's -mwords-little-endian option has been deprecated. It
   12322        will be removed in a future release.
   12323      * Support has been removed for the NetWare x86 configuration
   12324        obsoleted in GCC 4.6.
   12325      * It is no longer possible to use the "l" constraint in MIPS16 asm
   12326        statements.
   12327      * GCC versions 4.7.0 and 4.7.1 had changes to the C++ standard
   12328        library which affected the ABI in C++11 mode: a data member was
   12329        added to std::list changing its size and altering the definitions
   12330        of some member functions, and std::pair's move constructor was
   12331        non-trivial which altered the calling convention for functions with
   12332        std::pair arguments or return types. The ABI incompatibilities have
   12333        been fixed for GCC version 4.7.2 but as a result C++11 code
   12334        compiled with GCC 4.7.0 or 4.7.1 may be incompatible with C++11
   12335        code compiled with different GCC versions and with C++98/C++03 code
   12336        compiled with any version.
   12337      * On ARM, a bug has been fixed in GCC's implementation of the AAPCS
   12338        rules for the layout of vectors that could lead to wrong code being
   12339        generated. Vectors larger than 8 bytes in size are now by default
   12340        aligned to an 8-byte boundary. This is an ABI change: code that
   12341        makes explicit use of vector types may be incompatible with binary
   12342        objects built with older versions of GCC. Auto-vectorized code is
   12343        not affected by this change. (This change affects GCC versions
   12344        4.7.2 and later.)
   12345      * More information on porting to GCC 4.7 from previous versions of
   12346        GCC can be found in the [2]porting guide for this release.
   12347 
   12348 General Optimizer Improvements
   12349 
   12350      * Support for a new parameter --param case-values-threshold=n was
   12351        added to allow users to control the cutoff between doing switch
   12352        statements as a series of if statements and using a jump table.
   12353      * Link-time optimization (LTO) improvements:
   12354           + Improved scalability and reduced memory usage. Link time
   12355             optimization of Firefox now requires 3GB of RAM on a 64-bit
   12356             system, while over 8GB was needed previously. Linking time has
   12357             been improved, too. The serial stage of linking Firefox has
   12358             been sped up by about a factor of 10.
   12359           + Reduced size of object files and temporary storage used during
   12360             linking.
   12361           + Streaming performance (both outbound and inbound) has been
   12362             improved.
   12363           + ld -r is now supported with LTO.
   12364           + Several bug fixes, especially in symbol table handling and
   12365             merging.
   12366      * Interprocedural optimization improvements:
   12367           + Heuristics now take into account that after inlining code will
   12368             be optimized out because of known values (or properties) of
   12369             function parameters. For example:
   12370 void foo(int a)
   12371 {
   12372   if (a > 10)
   12373     ... huge code ...
   12374 }
   12375 void bar (void)
   12376 {
   12377   foo (0);
   12378 }
   12379 
   12380             The call of foo will be inlined into bar even when optimizing
   12381             for code size. Constructs based on __builtin_constant_p are
   12382             now understood by the inliner and code size estimates are
   12383             evaluated a lot more realistically.
   12384           + The representation of C++ virtual thunks and aliases (both
   12385             implicit and defined via the alias attribute) has been
   12386             re-engineered. Aliases no longer pose optimization barriers
   12387             and calls to an alias can be inlined and otherwise optimized.
   12388           + The inter-procedural constant propagation pass has been
   12389             rewritten. It now performs generic function specialization.
   12390             For example when compiling the following:
   12391 void foo(bool flag)
   12392 {
   12393   if (flag)
   12394     ... do something ...
   12395   else
   12396     ... do something else ...
   12397 }
   12398 void bar (void)
   12399 {
   12400   foo (false);
   12401   foo (true);
   12402   foo (false);
   12403   foo (true);
   12404   foo (false);
   12405   foo (true);
   12406 }
   12407 
   12408             GCC will now produce two copies of foo. One with flag being
   12409             true, while other with flag being false. This leads to
   12410             performance improvements previously possible only by inlining
   12411             all calls. Cloning causes a lot less code size growth.
   12412      * A string length optimization pass has been added. It attempts to
   12413        track string lengths and optimize various standard C string
   12414        functions like strlen, strchr, strcpy, strcat, stpcpy and their
   12415        _FORTIFY_SOURCE counterparts into faster alternatives. This pass is
   12416        enabled by default at -O2 or above, unless optimizing for size, and
   12417        can be disabled by the -fno-optimize-strlen option. The pass can
   12418        e.g. optimize
   12419 char *bar (const char *a)
   12420 {
   12421   size_t l = strlen (a) + 2;
   12422   char *p = malloc (l); if (p == NULL) return p;
   12423   strcpy (p, a); strcat (p, "/"); return p;
   12424 }
   12425 
   12426        into:
   12427 char *bar (const char *a)
   12428 {
   12429   size_t tmp = strlen (a);
   12430   char *p = malloc (tmp + 2); if (p == NULL) return p;
   12431   memcpy (p, a, tmp); memcpy (p + tmp, "/", 2); return p;
   12432 }
   12433 
   12434        or for hosted compilations where stpcpy is available in the runtime
   12435        and headers provide its prototype, e.g.
   12436 void foo (char *a, const char *b, const char *c, const char *d)
   12437 {
   12438   strcpy (a, b); strcat (a, c); strcat (a, d);
   12439 }
   12440 
   12441        can be optimized into:
   12442 void foo (char *a, const char *b, const char *c, const char *d)
   12443 {
   12444   strcpy (stpcpy (stpcpy (a, b), c), d);
   12445 }
   12446 
   12447 New Languages and Language specific improvements
   12448 
   12449      * Version 3.1 of the OpenMP specification is now supported for the C,
   12450        C++, and Fortran compilers.
   12451 
   12452   Ada
   12453 
   12454      * The command-line option -feliminate-unused-debug-types has been
   12455        re-enabled by default, as it is for the other languages, leading to
   12456        a reduction in debug info size of 12.5% and more for relevant
   12457        cases, as well as to a small compilation speedup.
   12458 
   12459   C family
   12460 
   12461      * A new built-in, __builtin_assume_aligned, has been added, through
   12462        which the compiler can be hinted about pointer alignment and can
   12463        use it to improve generated code.
   12464      * A new warning option -Wunused-local-typedefs was added for C, C++,
   12465        Objective-C and Objective-C++. This warning diagnoses typedefs
   12466        locally defined in a function, and otherwise not used.
   12467      * A new experimental command-line option -ftrack-macro-expansion was
   12468        added for C, C++, Objective-C, Objective-C++ and Fortran. It allows
   12469        the compiler to emit diagnostic about the current macro expansion
   12470        stack when a compilation error occurs in a macro expansion.
   12471      * Experimental support for transactional memory has been added. It
   12472        includes support in the compiler, as well as a supporting runtime
   12473        library called libitm. To compile code with transactional memory
   12474        constructs, use the -fgnu-tm option.
   12475        Support is currently available for Alpha, ARM, PowerPC, SH, SPARC,
   12476        and 32-bit/64-bit x86 platforms.
   12477        For more details on transactional memory see [3]the GCC WiKi.
   12478      * Support for atomic operations specifying the C++11/C11 memory model
   12479        has been added. These new __atomic routines replace the existing
   12480        __sync built-in routines.
   12481        Atomic support is also available for memory blocks. Lock-free
   12482        instructions will be used if a memory block is the same size and
   12483        alignment as a supported integer type. Atomic operations which do
   12484        not have lock-free support are left as function calls. A set of
   12485        library functions is available on the GCC atomic wiki in the
   12486        "External Atomics Library" section.
   12487        For more details on the memory models and features, see the
   12488        [4]atomic wiki.
   12489      * When a binary operation is performed on vector types and one of the
   12490        operands is a uniform vector, it is possible to replace the vector
   12491        with the generating element. For example:
   12492 typedef int v4si __attribute__ ((vector_size (16)));
   12493 v4si res, a = {1,2,3,4};
   12494 int x;
   12495 
   12496 res = 2 + a;  /* means {2,2,2,2} + a  */
   12497 res = a - x;  /* means a - {x,x,x,x}  */
   12498 
   12499   C
   12500 
   12501      * There is support for some more features from the C11 revision of
   12502        the ISO C standard. GCC now accepts the options -std=c11 and
   12503        -std=gnu11, in addition to the previous -std=c1x and -std=gnu1x.
   12504           + Unicode strings (previously supported only with options such
   12505             as -std=gnu11, now supported with -std=c11), and the
   12506             predefined macros __STDC_UTF_16__ and __STDC_UTF_32__.
   12507           + Nonreturning functions (_Noreturn and <stdnoreturn.h>).
   12508           + Alignment support (_Alignas, _Alignof, max_align_t,
   12509             <stdalign.h>).
   12510           + A built-in function __builtin_complex is provided to support C
   12511             library implementation of the CMPLX family of macros.
   12512 
   12513   [5]C++
   12514 
   12515      * G++ now accepts the -std=c++11, -std=gnu++11, and -Wc++11-compat
   12516        options, which are equivalent to -std=c++0x, -std=gnu++0x, and
   12517        -Wc++0x-compat, respectively.
   12518      * G++ now implements [6]C++11 extended friend syntax:
   12519 
   12520 template<class W>
   12521 class Q
   12522 {
   12523   static const int I = 2;
   12524 public:
   12525   friend W;
   12526 };
   12527 
   12528 struct B
   12529 {
   12530   int ar[Q<B>::I];
   12531 };
   12532 
   12533      * Thanks to Ville Voutilainen, G++ now implements [7]C++11 explicit
   12534        override control.
   12535 
   12536 struct B {
   12537   virtual void f() const final;
   12538   virtual void f(int);
   12539 };
   12540 
   12541 struct D : B {
   12542   void f() const;            // error: D::f attempts to override final B::f
   12543   void f(long) override;     // error: doesn't override anything
   12544   void f(int) override;      // ok
   12545 };
   12546 
   12547 struct E final { };
   12548 struct F: E { }; // error: deriving from final class
   12549 
   12550      * G++ now implements [8]C++11 non-static data member initializers.
   12551 
   12552 struct A {
   12553   int i = 42;
   12554 } a; // initializes a.i to 42
   12555 
   12556      * Thanks to Ed Smith-Rowland, G++ now implements [9]C++11
   12557        user-defined literals.
   12558 
   12559 // Not actually a good approximation.  :)
   12560 constexpr long double operator"" _degrees (long double d) { return d * 0.0175; }
   12561 long double pi = 180.0_degrees;
   12562 
   12563      * G++ now implements [10]C++11 alias-declarations.
   12564 
   12565 template <class T> using Ptr = T*;
   12566 Ptr<int> ip;  // decltype(ip) is int*
   12567 
   12568      * Thanks to Ville Voutilainen and Pedro Lamaro, G++ now implements
   12569        [11]C++11 delegating constructors.
   12570 
   12571 struct A {
   12572   A(int);
   12573   A(): A(42) { } // delegate to the A(int) constructor
   12574 };
   12575 
   12576      * G++ now fully implements C++11 atomic classes rather than just
   12577        integer derived classes.
   12578 
   12579 class POD {
   12580   int a;
   12581   int b;
   12582 };
   12583 std::atomic<POD> my_atomic_POD;
   12584 
   12585      * G++ now sets the predefined macro __cplusplus to the correct value,
   12586        199711L for C++98/03, and 201103L for C++11.
   12587      * G++ now correctly implements the two-phase lookup rules such that
   12588        an unqualified name used in a template must have an appropriate
   12589        declaration found either in scope at the point of definition of the
   12590        template or by argument-dependent lookup at the point of
   12591        instantiation. As a result, code that relies on a second
   12592        unqualified lookup at the point of instantiation to find functions
   12593        declared after the template or in dependent bases will be rejected.
   12594        The compiler will suggest ways to fix affected code, and using the
   12595        -fpermissive compiler flag will allow the code to compile with a
   12596        warning.
   12597 
   12598 template <class T>
   12599 void f() { g(T()); } // error, g(int) not found by argument-dependent lookup
   12600 void g(int) { } // fix by moving this declaration before the declaration of f
   12601 
   12602 template <class T>
   12603 struct A: T {
   12604   // error, B::g(B) not found by argument-dependent lookup
   12605   void f() { g(T()); } // fix by using this->g or A::g
   12606 };
   12607 
   12608 struct B { void g(B); };
   12609 
   12610 int main()
   12611 {
   12612   f<int>();
   12613   A<B>().f();
   12614 }
   12615 
   12616      * G++ now properly re-uses stack space allocated for temporary
   12617        objects when their lifetime ends, which can significantly lower
   12618        stack consumption for some C++ functions. As a result of this, some
   12619        code with undefined behavior will now break:
   12620 
   12621 const int &f(const int &i) { return i; }
   12622 ....
   12623 const int &x = f(1);
   12624 const int &y = f(2);
   12625 
   12626        Here, x refers to the temporary allocated to hold the 1 argument,
   12627        which only lives until the end of the initialization; it
   12628        immediately becomes a dangling reference. So the next statement
   12629        re-uses the stack slot to hold the 2 argument, and users of x get
   12630        that value instead.
   12631        Note that this should not cause any change of behavior for
   12632        temporaries of types with non-trivial destructors, as they are
   12633        already destroyed at end of full-expression; the change is that now
   12634        the storage is released as well.
   12635      * A new command-line option -Wdelete-non-virtual-dtor has been added
   12636        to warn when delete is used to destroy an instance of a class which
   12637        has virtual functions and non-virtual destructor. It is unsafe to
   12638        delete an instance of a derived class through a pointer to a base
   12639        class if the base class does not have a virtual destructor. This
   12640        warning is enabled by -Wall.
   12641      * A new command-line option -Wzero-as-null-pointer-constant has been
   12642        added to warn when a literal '0' is used as null pointer constant.
   12643        It can be useful to facilitate the conversion to nullptr in C++11.
   12644      * As per C++98, access-declarations are now deprecated by G++.
   12645        Using-declarations are to be used instead. Furthermore, some
   12646        efforts have been made to improve the support of class scope
   12647        using-declarations. In particular, using-declarations referring to
   12648        a dependent type now work as expected ([12]bug c++/14258).
   12649      * The ELF symbol visibility of a template instantiation is now
   12650        properly constrained by the visibility of its template arguments
   12651        ([13]bug c++/35688).
   12652 
   12653     Runtime Library (libstdc++)
   12654 
   12655      * [14]Improved experimental support for the new ISO C++ standard,
   12656        C++11, including:
   12657           + using noexcept in most of the library;
   12658           + implementations of pointer_traits, allocator_traits and
   12659             scoped_allocator_adaptor;
   12660           + uses-allocator construction for tuple;
   12661           + vector meets the allocator-aware container requirements;
   12662           + replacing monotonic_clock with steady_clock;
   12663           + enabling the thread support library on most POSIX targets;
   12664           + many small improvements to conform to the FDIS.
   12665      * Added --enable-clocale=newlib configure option.
   12666      * Debug Mode iterators for unordered associative containers.
   12667      * Avoid polluting the global namespace and do not include <unistd.h>.
   12668 
   12669   [15]Fortran
   12670 
   12671      * The compile flag [16]-fstack-arrays has been added, which causes
   12672        all local arrays to be put on stack memory. For some programs this
   12673        will improve the performance significantly. If your program uses
   12674        very large local arrays, it is possible that you will have to
   12675        extend your runtime limits for stack memory.
   12676      * The [17]-Ofast flag now also implies [18]-fno-protect-parens and
   12677        [19]-fstack-arrays.
   12678      * Front-end optimizations can now be selected by the
   12679        [20]-ffrontend-optimize option and deselected by the
   12680        -fno-frontend-optimize option.
   12681      * When front-end optimization removes a function call,
   12682        [21]-Wfunction-elimination warns about that.
   12683      * When performing front-end-optimization, the
   12684        [22]-faggressive-function-elimination option allows the removal of
   12685        duplicate function calls even for impure functions.
   12686      * The flag [23]-Wreal-q-constant has been added, which warns if
   12687        floating-point literals have been specified using q (such as
   12688        1.0q0); the q marker is now supported as a vendor extension to
   12689        denote quad precision (REAL(16) or, if not available, REAL(10)).
   12690        Consider using a kind parameter (such as in 1.0_qp) instead, which
   12691        can be obtained via [24]SELECTED_REAL_KIND.
   12692      * The GFORTRAN_USE_STDERR environment variable has been removed. GNU
   12693        Fortran now always prints error messages to standard error. If you
   12694        wish to redirect standard error, please consult the manual for your
   12695        OS, shell, batch environment etc. as appropriate.
   12696      * The -fdump-core option and GFORTRAN_ERROR_DUMPCORE environment
   12697        variable have been removed. When encountering a serious error,
   12698        gfortran will now always abort the program. Whether a core dump is
   12699        generated depends on the user environment settings; see the ulimit
   12700        -c setting for POSIX shells, limit coredumpsize for C shells, and
   12701        the [25]WER user-mode dumps settings on Windows.
   12702      * The [26]-fbacktrace option is now enabled by default. When
   12703        encountering a fatal error, gfortran will attempt to print a
   12704        backtrace to standard error before aborting. It can be disabled
   12705        with -fno-backtrace. Note: On POSIX targets with the addr2line
   12706        utility from GNU binutils, GNU Fortran can print a backtrace with
   12707        function name, file name, line number information in addition to
   12708        the addresses; otherwise only the addresses are printed.
   12709      * [27]Fortran 2003:
   12710           + Generic interface names which have the same name as derived
   12711             types are now supported, which allows to write constructor
   12712             functions. Note that Fortran does not support static
   12713             constructor functions; only default initialization or an
   12714             explicit structure-constructor initialization are available.
   12715           + [28]Polymorphic (class) arrays are now supported.
   12716      * [29]Fortran 2008:
   12717           + Support for the DO CONCURRENT construct has been added, which
   12718             allows the user to specify that individual loop iterations
   12719             have no interdependencies.
   12720           + [30]Coarrays: Full single-image support except for polymorphic
   12721             coarrays. Additionally, preliminary support for multiple
   12722             images via an MPI-based [31]coarray communication library has
   12723             been added. Note: The library version is not yet usable as
   12724             remote coarray access is not yet possible.
   12725      * [32]TS 29113:
   12726           + New flag [33]-std=f2008ts permits programs that are expected
   12727             to conform to the Fortran 2008 standard and the draft
   12728             Technical Specification (TS) 29113 on Further Interoperability
   12729             of Fortran with C.
   12730           + The OPTIONAL attribute is now allowed for dummy arguments of
   12731             BIND(C) procedures.
   12732           + The RANK intrinsic has been added.
   12733           + The implementation of the ASYNCHRONOUS attribute in GCC is
   12734             compatible with the candidate draft of TS 29113 (since GCC
   12735             4.6).
   12736 
   12737   [34]Go
   12738 
   12739      * GCC 4.7 implements the [35]Go 1 language standard. The library
   12740        support in 4.7.0 is not quite complete, due to release timing.
   12741        Release 4.7.1 includes complete support for Go 1. The Go library is
   12742        from the Go 1.0.1 release.
   12743      * Go has been tested on GNU/Linux and Solaris platforms. It may work
   12744        on other platforms as well.
   12745 
   12746 [36]New Targets and Target Specific Improvements
   12747 
   12748   [37]ARM
   12749 
   12750      * GCC now supports the Cortex-A7 processor implementing the v7-a
   12751        version of the architecture using the option -mcpu=cortex-a7.
   12752      * The default vector size in auto-vectorization for NEON is now 128
   12753        bits. If vectorization fails thusly, the vectorizer tries again
   12754        with 64-bit vectors.
   12755      * A new option -mvectorize-with-neon-double was added to allow users
   12756        to change the vector size to 64 bits.
   12757 
   12758   [38]AVR
   12759 
   12760      * The AVR port's libgcc has been improved and its multilib structure
   12761        has been enhanced. As a result, all objects contributing to an
   12762        application must either be compiled with GCC versions up to 4.6.x
   12763        or with GCC versions 4.7.1 or later. If the compiler is used with
   12764        AVR-LibC, you need a version that supports the new layout, i.e.
   12765        implements [39]#35407.
   12766      * The -mshort-calls command-line option has been deprecated. It will
   12767        be removed in the GCC 4.8 release. See -mrelax for a replacement.
   12768      * The compiled code only references startup code that clears .bss and
   12769        the common section resp. initializes the .data and .rodata section
   12770        provided respective sections (or subsections thereof) are not
   12771        empty, see [40]PR18145. Applications that put all static storage
   12772        objects into non-standard sections and / or define all static
   12773        storage objects in assembler modules, must reference __do_clear_bss
   12774        resp. __do_copy_data by hand or undefine the symbol(s) by means of
   12775        -Wl,-u,__do_clear_bss resp. -Wl,-u,__do_copy_data.
   12776      * GCC now supports the XMEGA architecture. This requires GNU Binutils
   12777        2.22 or later.
   12778      * Support for the [41]named address spaces __flash, __flash1, ...,
   12779        __flash5 and __memx has been added. These address spaces locate
   12780        read-only data in flash memory and allow reading from flash memory
   12781        by means of ordinary C code, i.e. without the need of (inline)
   12782        assembler code:
   12783 
   12784 const __flash int values[] = { 42, 31 };
   12785 
   12786 int add_values (const __flash int *p, int i)
   12787 {
   12788     return values[i] + *p;
   12789 }
   12790 
   12791      * Support has been added for the AVR-specific configure option
   12792        --with-avrlibc=yes in order to arrange for better integration of
   12793        [42]AVR-Libc. This configure option is supported in avr-gcc v4.7.2
   12794        and newer and will only take effect in non-RTEMS configurations. If
   12795        avr-gcc is configured for RTEMS, the option will be ignored which
   12796        is the same as specifying --with-avrlibc=no. See [43]PR54461 for
   12797        more technical details.
   12798      * Support for AVR-specific [44]built-in functions has been added.
   12799      * Support has been added for the signed and unsigned 24-bit scalar
   12800        integer types __int24 and __uint24.
   12801      * New command-line options -maccumulate-args, -mbranch-cost=cost and
   12802        -mstrict-X were added to allow better fine-tuning of code
   12803        optimization.
   12804      * The command-line option -fdata-sections now also takes affect on
   12805        the section names of variables with the progmem attribute.
   12806      * A new inline assembler print modifier %i to print a RAM address as
   12807        I/O address has been added:
   12808 
   12809 #include <avr/io.h> /* Port Definitions from AVR-LibC */
   12810 
   12811 void set_portb (uint8_t value)
   12812 {
   12813     asm volatile ("out %i0, %1" :: "n" (&PORTB), "r" (value) : "memory");
   12814 }
   12815 
   12816        The offset between an I/O address and the RAM address for that I/O
   12817        location is device-specific. This offset is taken into account when
   12818        printing a RAM address with the %i modifier so that the address is
   12819        suitable to be used as operand in an I/O command. The address must
   12820        be a constant integer known at compile time.
   12821      * The inline assembler constraint "R" to represent integers in the
   12822        range -6 ... 5 has been removed without replacement.
   12823      * Many optimizations to:
   12824           + 64-bit integer arithmetic
   12825           + Widening multiplication
   12826           + Integer division by a constant
   12827           + Avoid constant reloading in multi-byte instructions.
   12828           + Micro-optimizations for special instruction sequences.
   12829           + Generic built-in functions like __builtin_ffs*,
   12830             __builtin_clz*, etc.
   12831           + If-else decision trees generated by switch instructions
   12832           + Merging of data located in flash memory
   12833           + New libgcc variants for devices with 8-bit wide stack pointer
   12834           + ...
   12835      * Better documentation:
   12836           + Handling of EIND and indirect jumps on devices with more than
   12837             128 KiB of program memory.
   12838           + Handling of the RAMPD, RAMPX, RAMPY and RAMPZ special function
   12839             registers.
   12840           + Function attributes OS_main and OS_task.
   12841           + AVR-specific built-in macros.
   12842 
   12843   C6X
   12844 
   12845      * Support has been added for the Texas Instruments C6X family of
   12846        processors.
   12847 
   12848   CR16
   12849 
   12850      * Support has been added for National Semiconductor's CR16
   12851        architecture.
   12852 
   12853   Epiphany
   12854 
   12855      * Support has been added for Adapteva's Epiphany architecture.
   12856 
   12857   IA-32/x86-64
   12858 
   12859      * Support for Intel AVX2 intrinsics, built-in functions and code
   12860        generation is available via -mavx2.
   12861      * Support for Intel BMI2 intrinsics, built-in functions and code
   12862        generation is available via -mbmi2.
   12863      * Implementation and automatic generation of __builtin_clz* using the
   12864        lzcnt instruction is available via -mlzcnt.
   12865      * Support for Intel FMA3 intrinsics and code generation is available
   12866        via -mfma.
   12867      * A new -mfsgsbase command-line option is available that makes GCC
   12868        generate new segment register read/write instructions through
   12869        dedicated built-ins.
   12870      * Support for the new Intel rdrnd instruction is available via
   12871        -mrdrnd.
   12872      * Two additional AVX vector conversion instructions are available via
   12873        -mf16c.
   12874      * Support for new Intel processor codename IvyBridge with RDRND,
   12875        FSGSBASE and F16C is available through -march=core-avx-i.
   12876      * Support for the new Intel processor codename Haswell with AVX2,
   12877        FMA, BMI, BMI2, LZCNT is available through -march=core-avx2.
   12878      * Support for new AMD family 15h processors (Piledriver core) is now
   12879        available through -march=bdver2 and -mtune=bdver2 options.
   12880      * Support for [45]the x32 psABI is now available through the -mx32
   12881        option.
   12882      * Windows mingw targets are using the -mms-bitfields option by
   12883        default.
   12884      * Windows x86 targets are using the __thiscall calling convention for
   12885        C++ class-member functions.
   12886      * Support for the configure option --with-threads=posix for Windows
   12887        mingw targets.
   12888 
   12889   [46]MIPS
   12890 
   12891      * GCC now supports thread-local storage (TLS) for MIPS16. This
   12892        requires GNU binutils 2.22 or later.
   12893      * GCC can now generate code specifically for the Cavium Octeon+ and
   12894        Octeon2 processors. The associated command-line options are
   12895        -march=octeon+ and -march=octeon2 respectively. Both options
   12896        require GNU binutils 2.22 or later.
   12897      * GCC can now work around certain 24k errata, under the control of
   12898        the command-line option -mfix-24k. These workarounds require GNU
   12899        binutils 2.20 or later.
   12900      * 32-bit MIPS GNU/Linux targets such as mips-linux-gnu can now build
   12901        n32 and n64 multilibs. The result is effectively a 64-bit GNU/Linux
   12902        toolchain that generates 32-bit code by default. Use the
   12903        configure-time option --enable-targets=all to select these extra
   12904        multilibs.
   12905      * Passing -fno-delayed-branch now also stops the assembler from
   12906        automatically filling delay slots.
   12907 
   12908   PowerPC/PowerPC64
   12909 
   12910      * Vectors of type vector long long or vector long are passed and
   12911        returned using the same method as other vectors with the VSX
   12912        instruction set. Previously GCC did not adhere to the ABI for
   12913        128-bit vectors with 64-bit integer base types (PR 48857). This
   12914        will also be fixed in the GCC 4.6.1 and 4.5.4 releases.
   12915      * A new option -mno-pointers-to-nested-functions was added to allow
   12916        AIX 32-bit/64-bit and GNU/Linux 64-bit PowerPC users to specify
   12917        that the compiler should not load up the chain register (r11)
   12918        before calling a function through a pointer. If you use this
   12919        option, you cannot call nested functions through a pointer, or call
   12920        other languages that might use the static chain.
   12921      * A new option msave-toc-indirect was added to allow AIX
   12922        32-bit/64-bit and GNU/Linux 64-bit PowerPC users control whether we
   12923        save the TOC in the prologue for indirect calls or generate the
   12924        save inline. This can speed up some programs that call through a
   12925        function pointer a lot, but it can slow down other functions that
   12926        only call through a function pointer in exceptional cases.
   12927      * The PowerPC port will now enable machine-specific built-in
   12928        functions when the user switches the target machine using the
   12929        #pragma GCC target or __attribute__ ((__target__ ("target"))) code
   12930        sequences. In addition, the target macros are updated. However, due
   12931        to the way the -save-temps switch is implemented, you won't see the
   12932        effect of these additional macros being defined in preprocessor
   12933        output.
   12934 
   12935   SH
   12936 
   12937      * A new option -msoft-atomic has been added. When it is specified,
   12938        GCC will generate GNU/Linux-compatible gUSA atomic sequences for
   12939        the new __atomic routines.
   12940      * Since it is neither supported by GAS nor officially documented,
   12941        code generation for little endian SH2A has been disabled.
   12942        Specifying -ml with -m2a* will now result in a compiler error.
   12943      * The defunct -mbranch-cost option has been fixed.
   12944      * Some improvements to the generated code of:
   12945           + Utilization of the tst #imm,R0 instruction.
   12946           + Dynamic shift instructions on SH2A.
   12947           + Integer absolute value calculations.
   12948      * The -mdiv= option for targets other than SHmedia has been fixed and
   12949        documented.
   12950 
   12951   SPARC
   12952 
   12953      * The option -mflat has been reinstated. When it is specified, the
   12954        compiler will generate code for a single register window model.
   12955        This is essentially a new implementation and the corresponding
   12956        debugger support has been added to GDB 7.4.
   12957      * Support for the options -mtune=native and -mcpu=native has been
   12958        added on selected native platforms (GNU/Linux and Solaris).
   12959      * Support for the SPARC T3 (Niagara 3) processor has been added.
   12960      * VIS:
   12961           + An intrinsics header visintrin.h has been added.
   12962           + Builtin intrinsics for the VIS 1.0 edge handling and pixel
   12963             compare instructions have been added.
   12964           + The little-endian version of alignaddr is now supported.
   12965           + When possible, VIS builtins are marked const, which should
   12966             increase the compiler's ability to optimize VIS operations.
   12967           + The compiler now properly tracks the %gsr register and how it
   12968             behaves as an input for various VIS instructions.
   12969           + Akin to fzero, the compiler can now generate fone instructions
   12970             in order to set all of the bits of a floating-point register
   12971             to 1.
   12972           + The documentation for the VIS intrinsics in the GCC manual has
   12973             been brought up to date and many inaccuracies were fixed.
   12974           + Intrinsics for the VIS 2.0 bmask, bshuffle, and
   12975             non-condition-code setting edge instructions have been added.
   12976             Their availability is controlled by the new -mvis2 and
   12977             -mno-vis2 options. They are enabled by default on
   12978             UltraSPARC-III and later CPUs.
   12979      * Support for UltraSPARC Fused Multiply-Add floating-point extensions
   12980        has been added. These instructions are enabled by default on SPARC
   12981        T3 (Niagara 3) and later CPUs.
   12982 
   12983   TILE-Gx/TILEPro
   12984 
   12985      * Support has been added for the Tilera TILE-Gx and TILEPro families
   12986        of processors.
   12987 
   12988 Other significant improvements
   12989 
   12990      * A new option (-grecord-gcc-switches) was added that appends
   12991        compiler command-line options that might affect code generation to
   12992        the DW_AT_producer attribute string in the DWARF debugging
   12993        information.
   12994      * GCC now supports various new GNU extensions to the DWARF debugging
   12995        information format, like [47]entry value and [48]call site
   12996        information, [49]typed DWARF stack or [50]a more compact macro
   12997        representation. Support for these extensions has been added to GDB
   12998        7.4. They can be disabled through the -gstrict-dwarf command-line
   12999        option.
   13000 
   13001 [51]GCC 4.7.1
   13002 
   13003    This is the [52]list of problem reports (PRs) from GCC's bug tracking
   13004    system that are known to be fixed in the 4.7.1 release. This list might
   13005    not be complete (that is, it is possible that some PRs that have been
   13006    fixed are not listed here).
   13007 
   13008    The Go front end in the 4.7.1 release fully supports the [53]Go 1
   13009    language standard.
   13010 
   13011 [54]GCC 4.7.2
   13012 
   13013    This is the [55]list of problem reports (PRs) from GCC's bug tracking
   13014    system that are known to be fixed in the 4.7.2 release. This list might
   13015    not be complete (that is, it is possible that some PRs that have been
   13016    fixed are not listed here).
   13017 
   13018 [56]GCC 4.7.3
   13019 
   13020    This is the [57]list of problem reports (PRs) from GCC's bug tracking
   13021    system that are known to be fixed in the 4.7.3 release. This list might
   13022    not be complete (that is, it is possible that some PRs that have been
   13023    fixed are not listed here).
   13024 
   13025 [58]GCC 4.7.4
   13026 
   13027    This is the [59]list of problem reports (PRs) from GCC's bug tracking
   13028    system that are known to be fixed in the 4.7.4 release. This list might
   13029    not be complete (that is, it is possible that some PRs that have been
   13030    fixed are not listed here).
   13031 
   13032 
   13033     For questions related to the use of GCC, please consult these web
   13034     pages and the [60]GCC manuals. If that fails, the
   13035     [61]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   13036     web pages and the development of GCC are welcome on our developer
   13037     list at [62]gcc (a] gcc.gnu.org. All of [63]our lists have public
   13038     archives.
   13039 
   13040    Copyright (C) [64]Free Software Foundation, Inc. Verbatim copying and
   13041    distribution of this entire article is permitted in any medium,
   13042    provided this notice is preserved.
   13043 
   13044    These pages are [65]maintained by the GCC team. Last modified
   13045    2025-02-28.
   13046 
   13047 References
   13048 
   13049    1. https://gcc.gnu.org/ml/gcc-patches/2011-03/msg01263.html
   13050    2. https://gcc.gnu.org/gcc-4.7/porting_to.html
   13051    3. https://gcc.gnu.org/wiki/TransactionalMemory
   13052    4. https://gcc.gnu.org/wiki/Atomic/GCCMM
   13053    5. https://gcc.gnu.org/gcc-4.7/changes.html#cxx
   13054    6. https://gcc.gnu.org/gcc-4.7/cxx0x_status.html
   13055    7. https://gcc.gnu.org/gcc-4.7/cxx0x_status.html
   13056    8. https://gcc.gnu.org/gcc-4.7/cxx0x_status.html
   13057    9. https://gcc.gnu.org/gcc-4.7/cxx0x_status.html
   13058   10. https://gcc.gnu.org/gcc-4.7/cxx0x_status.html
   13059   11. https://gcc.gnu.org/gcc-4.7/cxx0x_status.html
   13060   12. https://gcc.gnu.org/PR14258
   13061   13. https://gcc.gnu.org/PR35688
   13062   14. https://gcc.gnu.org/onlinedocs/gcc-4.7.4/libstdc++/manual/manual/status.html#status.iso.2011
   13063   15. https://gcc.gnu.org/gcc-4.7/changes.html#fortran
   13064   16. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfstack-arrays_007d-254
   13065   17. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc/Optimize-Options.html#index-Ofast-689
   13066   18. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfno-protect-parens_007d-270
   13067   19. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfstack-arrays_007d-254
   13068   20. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfrontend-optimize_007d-275
   13069   21. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Error-and-Warning-Options.html#index-g_t_0040code_007bWfunction-elimination_007d-170
   13070   22. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfaggressive-function-elimination_007d-270
   13071   23. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Error-and-Warning-Options.html#index-g_t_0040code_007bWreal-q-constant_007d-149
   13072   24. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/SELECTED_005fREAL_005fKIND.html
   13073   25. https://learn.microsoft.com/en-us/windows/win32/wer/collecting-user-mode-dumps
   13074   26. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Debugging-Options.html#index-g_t_0040code_007bfno-backtrace_007d-183
   13075   27. https://gcc.gnu.org/wiki/Fortran2003Status
   13076   28. https://gcc.gnu.org/wiki/OOP
   13077   29. https://gcc.gnu.org/wiki/Fortran2008Status
   13078   30. https://gcc.gnu.org/wiki/Coarray
   13079   31. https://gcc.gnu.org/wiki/CoarrayLib
   13080   32. https://gcc.gnu.org/wiki/TS29113Status
   13081   33. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Fortran-Dialect-Options.html#index-g_t_0040code_007bstd_003d_007d_0040var_007bstd_007d-option-53
   13082   34. https://gcc.gnu.org/gcc-4.7/changes.html#go
   13083   35. https://go.dev/doc/go1
   13084   36. https://gcc.gnu.org/gcc-4.7/changes.html#targets
   13085   37. https://gcc.gnu.org/gcc-4.7/changes.html#arm
   13086   38. https://gcc.gnu.org/gcc-4.7/changes.html#avr
   13087   39. http://savannah.nongnu.org/bugs/?35407
   13088   40. https://gcc.gnu.org/PR18145
   13089   41. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc/Named-Address-Spaces.html
   13090   42. http://www.nongnu.org/avr-libc/
   13091   43. https://gcc.gnu.org/PR54461
   13092   44. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc/AVR-Built%5f002din-Functions.html
   13093   45. https://sites.google.com/site/x32abi/
   13094   46. https://gcc.gnu.org/gcc-4.7/changes.html#mips
   13095   47. https://dwarfstd.org/issues/100909.1.html
   13096   48. https://dwarfstd.org/issues/100909.2.html
   13097   49. https://dwarfstd.org/issues/140425.1.html
   13098   50. https://dwarfstd.org/issues/110722.1.html
   13099   51. https://gcc.gnu.org/gcc-4.7/changes.html#GCC4.7.1
   13100   52. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.7.1
   13101   53. https://go.dev/doc/go1
   13102   54. https://gcc.gnu.org/gcc-4.7/changes.html#GCC4.7.2
   13103   55. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.7.2
   13104   56. https://gcc.gnu.org/gcc-4.7/changes.html#GCC4.7.3
   13105   57. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.7.3
   13106   58. https://gcc.gnu.org/gcc-4.7/changes.html#GCC4.7.4
   13107   59. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.7.4
   13108   60. https://gcc.gnu.org/onlinedocs/
   13109   61. mailto:gcc-help (a] gcc.gnu.org
   13110   62. mailto:gcc (a] gcc.gnu.org
   13111   63. https://gcc.gnu.org/lists.html
   13112   64. https://www.fsf.org/
   13113   65. https://gcc.gnu.org/about.html
   13114 ======================================================================
   13115 http://gcc.gnu.org/gcc-4.6/index.html
   13116 
   13117                              GCC 4.6 Release Series
   13118 
   13119    (This release series is no longer supported.)
   13120 
   13121    April 12, 2013
   13122 
   13123    The [1]GNU project and the GCC developers are pleased to announce the
   13124    release of GCC 4.6.4.
   13125 
   13126    This release is a bug-fix release, containing fixes for regressions in
   13127    GCC 4.6.3 relative to previous releases of GCC.
   13128 
   13129 Release History
   13130 
   13131    GCC 4.6.4
   13132           April 12, 2013 ([2]changes, [3]documentation)
   13133 
   13134    GCC 4.6.3
   13135           March 1, 2012 ([4]changes, [5]documentation)
   13136 
   13137    GCC 4.6.2
   13138           October 26, 2011 ([6]changes, [7]documentation)
   13139 
   13140    GCC 4.6.1
   13141           June 27, 2011 ([8]changes, [9]documentation)
   13142 
   13143    GCC 4.6.0
   13144           March 25, 2011 ([10]changes, [11]documentation)
   13145 
   13146 References and Acknowledgements
   13147 
   13148    GCC used to stand for the GNU C Compiler, but since the compiler
   13149    supports several other languages aside from C, it now stands for the
   13150    GNU Compiler Collection.
   13151 
   13152    A list of [12]successful builds is updated as new information becomes
   13153    available.
   13154 
   13155    The GCC developers would like to thank the numerous people that have
   13156    contributed new features, improvements, bug fixes, and other changes as
   13157    well as test results to GCC. This [13]amazing group of volunteers is
   13158    what makes GCC successful.
   13159 
   13160    For additional information about GCC please refer to the [14]GCC
   13161    project web site or contact the [15]GCC development mailing list.
   13162 
   13163    To obtain GCC please use [16]our mirror sites or [17]our version
   13164    control system.
   13165 
   13166 
   13167     For questions related to the use of GCC, please consult these web
   13168     pages and the [18]GCC manuals. If that fails, the
   13169     [19]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   13170     web pages and the development of GCC are welcome on our developer
   13171     list at [20]gcc (a] gcc.gnu.org. All of [21]our lists have public
   13172     archives.
   13173 
   13174    Copyright (C) [22]Free Software Foundation, Inc. Verbatim copying and
   13175    distribution of this entire article is permitted in any medium,
   13176    provided this notice is preserved.
   13177 
   13178    These pages are [23]maintained by the GCC team. Last modified
   13179    2022-10-26.
   13180 
   13181 References
   13182 
   13183    1. http://www.gnu.org/
   13184    2. https://gcc.gnu.org/gcc-4.6/changes.html
   13185    3. https://gcc.gnu.org/onlinedocs/4.6.4/
   13186    4. https://gcc.gnu.org/gcc-4.6/changes.html
   13187    5. https://gcc.gnu.org/onlinedocs/4.6.3/
   13188    6. https://gcc.gnu.org/gcc-4.6/changes.html
   13189    7. https://gcc.gnu.org/onlinedocs/4.6.2/
   13190    8. https://gcc.gnu.org/gcc-4.6/changes.html
   13191    9. https://gcc.gnu.org/onlinedocs/4.6.1/
   13192   10. https://gcc.gnu.org/gcc-4.6/changes.html
   13193   11. https://gcc.gnu.org/onlinedocs/4.6.0/
   13194   12. https://gcc.gnu.org/gcc-4.6/buildstat.html
   13195   13. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   13196   14. https://gcc.gnu.org/index.html
   13197   15. mailto:gcc (a] gcc.gnu.org
   13198   16. https://gcc.gnu.org/mirrors.html
   13199   17. https://gcc.gnu.org/git.html
   13200   18. https://gcc.gnu.org/onlinedocs/
   13201   19. mailto:gcc-help (a] gcc.gnu.org
   13202   20. mailto:gcc (a] gcc.gnu.org
   13203   21. https://gcc.gnu.org/lists.html
   13204   22. https://www.fsf.org/
   13205   23. https://gcc.gnu.org/about.html
   13206 ======================================================================
   13207 http://gcc.gnu.org/gcc-4.6/changes.html
   13208 
   13209                              GCC 4.6 Release Series
   13210                         Changes, New Features, and Fixes
   13211 
   13212 Caveats
   13213 
   13214      * The options -b <machine> and -V <version> have been removed because
   13215        they were unreliable. Instead, users should directly run
   13216        <machine>-gcc when cross-compiling, or <machine>-gcc-<version> to
   13217        run a different version of gcc.
   13218      * GCC now has stricter checks for invalid command-line options. In
   13219        particular, when gcc was called to link object files rather than
   13220        compile source code, it would previously accept and ignore all
   13221        options starting with --, including linker options such as
   13222        --as-needed and --export-dynamic, although such options would
   13223        result in errors if any source code was compiled. Such options, if
   13224        unknown to the compiler, are now rejected in all cases; if the
   13225        intent was to pass them to the linker, options such as
   13226        -Wl,--as-needed should be used.
   13227      * Versions of the GNU C library up to and including 2.11.1 included
   13228        an [1]incorrect implementation of the cproj function. GCC optimizes
   13229        its builtin cproj according to the behavior specified and allowed
   13230        by the ISO C99 standard. If you want to avoid discrepancies between
   13231        the C library and GCC's builtin transformations when using cproj in
   13232        your code, use GLIBC 2.12 or later. If you are using an older GLIBC
   13233        and actually rely on the incorrect behavior of cproj, then you can
   13234        disable GCC's transformations using -fno-builtin-cproj.
   13235      * The C-only intermodule optimization framework (IMA, enabled by
   13236        -combine) has been removed in favor of the new generic link-time
   13237        optimization framework (LTO) introduced in [2]GCC 4.5.0.
   13238      * GCC now ships with the LGPL-licensed libquadmath library, which
   13239        provides quad-precision mathematical functions for targets with a
   13240        __float128 datatype. __float128 is available for targets on 32-bit
   13241        x86, x86-64 and Itanium architectures. The libquadmath library is
   13242        automatically built on such targets when building the Fortran
   13243        compiler.
   13244      * New -Wunused-but-set-variable and -Wunused-but-set-parameter
   13245        warnings were added for C, C++, Objective-C and Objective-C++.
   13246        These warnings diagnose variables respective parameters which are
   13247        only set in the code and never otherwise used. Usually such
   13248        variables are useless and often even the value assigned to them is
   13249        computed needlessly, sometimes expensively. The
   13250        -Wunused-but-set-variable warning is enabled by default by -Wall
   13251        flag and -Wunused-but-set-parameter by -Wall -Wextra flags.
   13252      * On ARM, a bug has been fixed in GCC's implementation of the AAPCS
   13253        rules for the layout of vectors that could lead to wrong code being
   13254        generated. Vectors larger than 8 bytes in size are now by default
   13255        aligned to an 8-byte boundary. This is an ABI change: code that
   13256        makes explicit use of vector types may be incompatible with binary
   13257        objects built with older versions of GCC. Auto-vectorized code is
   13258        not affected by this change. (This change affects GCC versions
   13259        4.6.4 and later, with the exception of versions 4.7.0 and 4.7.1.)
   13260      * On AVR, variables with the progmem attribute to locate data in
   13261        flash memory must be qualified as const.
   13262      * Support for a number of older systems and recently unmaintained or
   13263        untested target ports of GCC has been declared obsolete in GCC 4.6.
   13264        Unless there is activity to revive them, the next release of GCC
   13265        will have their sources permanently removed.
   13266        All GCC ports for the following processor architectures have been
   13267        declared obsolete:
   13268           + Argonaut ARC (arc-*)
   13269           + National Semiconductor CRX (crx-*)
   13270           + Motorola 68HC11 and 68HC12 (m68hc11-*-*, m6811-*-*,
   13271             m68hc12-*-*, m6812-*-*)
   13272           + Sunplus S+core (score-*)
   13273        The following ports for individual systems on particular
   13274        architectures have been obsoleted:
   13275           + Interix (i[34567]86-*-interix3*)
   13276           + NetWare x86 (i[3456x]86-*-netware*)
   13277           + Generic ARM PE (arm-*-pe* other than arm*-wince-pe*)
   13278           + MCore PE (mcore-*-pe*)
   13279           + SH SymbianOS (sh*-*-symbianelf*)
   13280           + GNU Hurd on Alpha and PowerPC (alpha*-*-gnu*, powerpc*-*-gnu*)
   13281           + M68K uClinux old ABI (m68k-*-uclinuxoldabi*)
   13282           + a.out NetBSD (arm*-*-netbsd*, i[34567]86-*-netbsd*,
   13283             vax-*-netbsd*, but not *-*-netbsdelf*)
   13284        The i[34567]86-*-pe alias for Cygwin targets has also been
   13285        obsoleted; users should configure for i[34567]86-*-cygwin* instead.
   13286        Certain configure options to control the set of libraries built
   13287        with GCC on some targets have been obsoleted. On ARM targets, the
   13288        options --disable-fpu, --disable-26bit, --disable-underscore,
   13289        --disable-interwork, --disable-biendian and --disable-nofmult have
   13290        been obsoleted. On MIPS targets, the options
   13291        --disable-single-float, --disable-biendian and --disable-softfloat
   13292        have been obsoleted.
   13293      * Support has been removed for all the [3]configurations obsoleted in
   13294        GCC 4.5.
   13295      * More information on porting to GCC 4.6 from previous versions of
   13296        GCC can be found in the [4]porting guide for this release.
   13297 
   13298 General Optimizer Improvements
   13299 
   13300      * A new general optimization level, -Ofast, has been introduced. It
   13301        combines the existing optimization level -O3 with options that can
   13302        affect standards compliance but result in better optimized code.
   13303        For example, -Ofast enables -ffast-math.
   13304      * Link-time optimization improvements:
   13305           + The [5]Scalable Whole Program Optimizer (WHOPR) project has
   13306             stabilized to the point of being usable. It has become the
   13307             default mode when using the LTO optimization model. Link time
   13308             optimization can now split itself into multiple parallel
   13309             compilations. Parallelism is controlled with -flto=n (where n
   13310             specifies the number of compilations to execute in parallel).
   13311             GCC can also cooperate with a GNU make job server by
   13312             specifying the -flto=jobserver option and adding + to the
   13313             beginning of the Makefile rule executing the linker.
   13314             Classical LTO mode can be enforced by -flto-partition=none.
   13315             This may result in small code quality improvements.
   13316           + A large number of bugs were fixed. GCC itself, Mozilla Firefox
   13317             and other large applications can be built with LTO enabled.
   13318           + The linker plugin support improvements
   13319                o Linker plugin is now enabled by default when the linker
   13320                  is detected to have plugin support. This is the case for
   13321                  GNU ld 2.21.51 or newer (on ELF and Cygwin targets) and
   13322                  the Gold linker on ELF targets. Plugin support of the
   13323                  Apple linker on Darwin is not compatible with GCC. The
   13324                  linker plugin can also be controlled by the
   13325                  -fuse-linker-plugin command-line option.
   13326                o Resolution information from the linker plugin is used to
   13327                  drive whole program assumptions. Use of the linker plugin
   13328                  results in more aggressive optimization on binaries and
   13329                  on shared libraries that use the hidden visibility
   13330                  attribute. Consequently the use of -fwhole-program is not
   13331                  necessary in addition to LTO.
   13332           + Hidden symbols used from non-LTO objects now have to be
   13333             explicitly annotated with externally_visible when the linker
   13334             plugin is not used.
   13335           + C++ inline functions and virtual tables are now privatized
   13336             more aggressively, leading to better inter-procedural
   13337             optimization and faster dynamic linking.
   13338           + Memory usage and intermediate language streaming performance
   13339             have been improved.
   13340           + Static constructors and destructors from individual units are
   13341             inlined into a single function. This can significantly improve
   13342             startup times of large C++ applications where static
   13343             constructors are very common. For example, static constructors
   13344             are used when including the iostream header.
   13345           + Support for the Ada language has been added.
   13346      * Interprocedural optimization improvements
   13347           + The interprocedural framework was re-tuned for link time
   13348             optimization. Several scalability issues were resolved.
   13349           + Improved auto-detection of const and pure functions. Newly,
   13350             noreturn functions are auto-detected.
   13351             The [6]-Wsuggest-attribute=[const|pure|noreturn] flag is
   13352             available that informs users when adding attributes to headers
   13353             might improve code generation.
   13354           + A number of inlining heuristic improvements. In particular:
   13355                o Partial inlining is now supported and enabled by default
   13356                  at -O2 and greater. The feature can be controlled via
   13357                  -fpartial-inlining.
   13358                  Partial inlining splits functions with short hot path to
   13359                  return. This allows more aggressive inlining of the hot
   13360                  path leading to better performance and often to code size
   13361                  reductions (because cold parts of functions are not
   13362                  duplicated).
   13363                o Scalability for large compilation units was improved
   13364                  significantly.
   13365                o Inlining of callbacks is now more aggressive.
   13366                o Virtual methods are considered for inlining when the
   13367                  caller is inlined and devirtualization is then possible.
   13368                o Inlining when optimizing for size (either in cold regions
   13369                  of a program or when compiling with -Os) was improved to
   13370                  better handle C++ programs with larger abstraction
   13371                  penalty, leading to smaller and faster code.
   13372           + The IPA reference optimization pass detecting global variables
   13373             used or modified by functions was strengthened and sped up.
   13374           + Functions whose address was taken are now optimized out when
   13375             all references to them are dead.
   13376           + A new inter-procedural static profile estimation pass detects
   13377             functions that are executed once or unlikely to be executed.
   13378             Unlikely executed functions are optimized for size. Functions
   13379             executed once are optimized for size except for the inner
   13380             loops.
   13381           + On most targets with named section support, functions used
   13382             only at startup (static constructors and main), functions used
   13383             only at exit and functions detected to be cold are placed into
   13384             separate text segment subsections. This extends the
   13385             -freorder-functions feature and is controlled by the same
   13386             switch. The goal is to improve the startup time of large C++
   13387             programs.
   13388             Proper function placement requires linker support. GNU ld
   13389             2.21.51 on ELF targets was updated to place those functions
   13390             together within the text section leading to better code
   13391             locality and faster startup times of large C++ programs. The
   13392             feature is also supported in the Apple linker. Support in the
   13393             gold linker is planned.
   13394      * A new switch -fstack-usage has been added. It makes the compiler
   13395        output stack usage information for the program, on a per-function
   13396        basis, in an auxiliary file.
   13397      * A new switch -fcombine-stack-adjustments has been added. It can be
   13398        used to enable or disable the compiler's stack-slot combining pass
   13399        which before was enabled automatically at -O1 and above, but could
   13400        not be controlled on its own.
   13401      * A new switch -fstrict-volatile-bitfields has been added. Using it
   13402        indicates that accesses to volatile bitfields should use a single
   13403        access of the width of the field's type. This option can be useful
   13404        for precisely defining and accessing memory-mapped peripheral
   13405        registers from C or C++.
   13406 
   13407 Compile time and memory usage improvements
   13408 
   13409      * Datastructures used by the dataflow framework in GCC were
   13410        reorganized for better memory usage and more cache locality.
   13411        Compile time is improved especially on units with large functions
   13412        (possibly resulting from a lot of inlining) not fitting into the
   13413        processor cache. The compile time of the GCC C compiler binary with
   13414        link-time optimization went down by over 10% (benchmarked on x86-64
   13415        target).
   13416 
   13417 New Languages and Language specific improvements
   13418 
   13419   Ada
   13420 
   13421      * Stack checking has been improved on selected architectures (Alpha,
   13422        IA-32/x86-64, RS/6000 and SPARC): it now will detect stack
   13423        overflows in all cases on these architectures.
   13424      * Initial support for Ada 2012 has been added.
   13425 
   13426   C family
   13427 
   13428      * A new warning, enabled by -Wdouble-promotion, has been added that
   13429        warns about cases where a value of type float is implicitly
   13430        promoted to double. This is especially helpful for CPUs that handle
   13431        the former in hardware, but emulate the latter in software.
   13432      * A new function attribute leaf was introduced. This attribute allows
   13433        better inter-procedural optimization across calls to functions that
   13434        return to the current unit only via returning or exception
   13435        handling. This is the case for most library functions that have no
   13436        callbacks.
   13437      * Support for a new data type __int128 for targets having wide enough
   13438        machine-mode support.
   13439      * The new function attribute callee_pop_aggregate allows to specify
   13440        if the caller or callee is responsible for popping the aggregate
   13441        return pointer value from the stack.
   13442      * Support for selectively enabling and disabling warnings via #pragma
   13443        GCC diagnostic has been added. For instance:
   13444 #pragma GCC diagnostic error "-Wuninitialized"
   13445   foo(a);                       /* error is given for this one */
   13446 #pragma GCC diagnostic push
   13447 #pragma GCC diagnostic ignored "-Wuninitialized"
   13448   foo(b);                       /* no diagnostic for this one */
   13449 #pragma GCC diagnostic pop
   13450   foo(c);                       /* error is given for this one */
   13451 #pragma GCC diagnostic pop
   13452   foo(d);                       /* depends on command-line options */
   13453 
   13454      * The -fmax-errors=N option is now supported. Using this option
   13455        causes the compiler to exit after N errors have been issued.
   13456 
   13457   [7]C
   13458 
   13459      * There is now experimental support for some features from the
   13460        upcoming C1X revision of the ISO C standard. This support may be
   13461        selected with -std=c1x, or -std=gnu1x for C1X with GNU extensions.
   13462        Note that this support is experimental and may change incompatibly
   13463        in future releases for consistency with changes to the C1X standard
   13464        draft. The following features are newly supported as described in
   13465        the N1539 draft of C1X (with changes agreed at the March 2011 WG14
   13466        meeting); some other features were already supported with no
   13467        compiler changes being needed, or have some support but not in full
   13468        accord with N1539 (as amended).
   13469           + Static assertions (_Static_assert keyword)
   13470           + Typedef redefinition
   13471           + New macros in <float.h>
   13472           + Anonymous structures and unions
   13473      * The new -fplan9-extensions option directs the compiler to support
   13474        some extensions for anonymous struct fields which are implemented
   13475        by the Plan 9 compiler. A pointer to a struct may be automatically
   13476        converted to a pointer to an anonymous field when calling a
   13477        function, in order to make the types match. An anonymous struct
   13478        field whose type is a typedef name may be referred to using the
   13479        typedef name.
   13480 
   13481   [8]C++
   13482 
   13483      * Improved [9]experimental support for the upcoming C++0x ISO C++
   13484        standard, including support for constexpr (thanks to Gabriel Dos
   13485        Reis and Jason Merrill), nullptr (thanks to Magnus Fromreide),
   13486        noexcept, unrestricted unions, range-based for loops (thanks to
   13487        Rodrigo Rivas Costa), opaque enum declarations (thanks also to
   13488        Rodrigo), implicitly deleted functions and implicit move
   13489        constructors.
   13490      * When an extern declaration within a function does not match a
   13491        declaration in the enclosing context, G++ now properly declares the
   13492        name within the namespace of the function rather than the namespace
   13493        which was open just before the function definition ([10]c++/43145).
   13494      * GCC now warns by default when casting integers to larger pointer
   13495        types. These warnings can be disabled with the option
   13496        -Wno-int-to-pointer-cast, which is now also available in C++.
   13497      * G++ no longer optimizes using the assumption that a value of
   13498        enumeration type will fall within the range specified by the
   13499        standard, since that assumption is easily violated with a
   13500        conversion from integer type ([11]c++/43680). The old behavior can
   13501        be restored with -fstrict-enums.
   13502      * The new -fnothrow-opt flag changes the semantics of a throw()
   13503        exception specification to match the proposed semantics of the
   13504        noexcept specification: just call terminate if an exception tries
   13505        to propagate out of a function with such an exception
   13506        specification. This dramatically reduces or eliminates the code
   13507        size overhead from adding the exception specification.
   13508      * The new -Wnoexcept flag will suggest adding a noexcept qualifier to
   13509        a function that the compiler can tell doesn't throw if it would
   13510        change the value of a noexcept expression.
   13511      * The -Wshadow option now warns if a local variable or type
   13512        declaration shadows another type in C++. Note that the compiler
   13513        will not warn if a local variable shadows a struct/class/enum, but
   13514        will warn if it shadows an explicit typedef.
   13515      * When an identifier is not found in the current scope, G++ now
   13516        offers suggestions about which identifier might have been intended.
   13517      * G++ now issues clearer diagnostics for missing semicolons after
   13518        class, struct, and union definitions.
   13519      * G++ now issues clearer diagnostics for missing semicolons after
   13520        class member declarations.
   13521      * G++ now issues clearer diagnostics when a colon is used in a place
   13522        where a double-colon was intended.
   13523      * G++ no longer accepts mutable on reference members ([12]c++/33558).
   13524        Use -fpermissive to allow the old, non-conforming behaviour.
   13525      * A few mangling fixes have been made, to attribute const/volatile on
   13526        function pointer types, decltype of a plain decl, and use of a
   13527        function parameter in the declaration of another parameter. By
   13528        default the compiler still uses the old mangling, but emits aliases
   13529        with the new mangling on targets that support strong aliases. Users
   13530        can switch over entirely to the new mangling with -fabi-version=5
   13531        or -fabi-version=0. -Wabi will now warn about code that uses the
   13532        old mangling.
   13533      * In 4.6.0 and 4.6.1 G++ no longer allows objects of const-qualified
   13534        type to be default initialized unless the type has a user-declared
   13535        default constructor. In 4.6.2 G++ implements the proposed
   13536        resolution of [13]DR 253, so default initialization is allowed if
   13537        it initializes all subobjects. Code that fails to compile can be
   13538        fixed by providing an initializer e.g.
   13539     struct A { A(); };
   13540     struct B : A { int i; };
   13541     const B b = B();
   13542        Use -fpermissive to allow the old, non-conforming behaviour.
   13543 
   13544     Runtime Library (libstdc++)
   13545 
   13546      * [14]Improved experimental support for the upcoming ISO C++
   13547        standard, C++0x, including using constexpr and nullptr.
   13548      * Performance improvements to the [15]Debug Mode, thanks to Franois
   13549        Dumont.
   13550      * Atomic operations used for reference-counting are annotated so that
   13551        they can be understood by race detectors such as Helgrind, see
   13552        [16]Data Race Hunting.
   13553      * Most libstdc++ standard headers have been changed to no longer
   13554        include the cstddef header as an implementation detail. Code that
   13555        relied on that header being included as side-effect of including
   13556        other standard headers will need to include cstddef explicitly.
   13557 
   13558   [17]Fortran
   13559 
   13560      * On systems supporting the libquadmath library, GNU Fortran now also
   13561        supports a quad-precision, kind=16 floating-point data type
   13562        (REAL(16), COMPLEX(16)). As the data type is not fully supported in
   13563        hardware, calculations might be one to two orders of magnitude
   13564        slower than with the 4, 8 or 10 bytes floating-point data types.
   13565        This change does not affect systems which support REAL(16) in
   13566        hardware nor those which do not support libquadmath.
   13567      * Much improved compile time for large array constructors.
   13568      * In order to reduce execution time and memory consumption, use of
   13569        temporary arrays in assignment expressions is avoided for many
   13570        cases. The compiler now reverses loops in order to avoid generating
   13571        a temporary array where possible.
   13572      * Improved diagnostics, especially with -fwhole-file.
   13573      * The -fwhole-file flag is now enabled by default. This improves code
   13574        generation and diagnostics. It can be disabled using the deprecated
   13575        -fno-whole-file flag.
   13576      * Support the generation of Makefile dependencies via the [18]-M...
   13577        flags of GCC; you may need to specify the -cpp option in addition.
   13578        The dependencies take modules, Fortran's include, and CPP's
   13579        #include into account. Note: Using -M for the module path is no
   13580        longer supported, use -J instead.
   13581      * The flag -Wconversion has been modified to only issue warnings
   13582        where a conversion leads to information loss. This drastically
   13583        reduces the number of warnings; -Wconversion is thus now enabled
   13584        with -Wall. The flag -Wconversion-extra has been added and also
   13585        warns about other conversions; -Wconversion-extra typically issues
   13586        a huge number of warnings, most of which can be ignored.
   13587      * A new command-line option -Wunused-dummy-argument warns about
   13588        unused dummy arguments and is included in -Wall. Before,
   13589        -Wunused-variable also warned about unused dummy arguments.
   13590      * Fortran 2003 support has been extended:
   13591           + Improved support for polymorphism between libraries and
   13592             programs and for complicated inheritance patterns (cf.
   13593             [19]object-oriented programming).
   13594           + Experimental support of the ASSOCIATE construct.
   13595           + In pointer assignments it is now possible to specify the lower
   13596             bounds of the pointer and, for a rank-1 or a simply contiguous
   13597             data-target, to remap the bounds.
   13598           + Automatic (re)allocation: In intrinsic assignments to
   13599             allocatable variables the left-hand side will be automatically
   13600             allocated (if unallocated) or reallocated (if the shape or
   13601             type parameter is different). To avoid the small performance
   13602             penalty, you can use a(:) = ... instead of a = ... for arrays
   13603             and character strings - or disable the feature using -std=f95
   13604             or -fno-realloc-lhs.
   13605           + Deferred type parameter: For scalar allocatable and pointer
   13606             variables the character length can be deferred.
   13607           + Namelist variables with allocatable and pointer attribute and
   13608             nonconstant length type parameter are supported.
   13609      * Fortran 2008 support has been extended:
   13610           + Experimental [20]coarray support (for one image only, i.e.
   13611             num_images() == 1); use the [21]-fcoarray=single flag to
   13612             enable it.
   13613           + The STOP and the new ERROR STOP statements now support all
   13614             constant expressions.
   13615           + Support for the CONTIGUOUS attribute.
   13616           + Support for ALLOCATE with MOLD.
   13617           + Support for the STORAGE_SIZE intrinsic inquiry function.
   13618           + Support of the NORM2 and PARITY intrinsic functions.
   13619           + The following bit intrinsics were added: POPCNT and POPPAR for
   13620             counting the number of 1 bits and returning the parity; BGE,
   13621             BGT, BLE, and BLT for bitwise comparisons; DSHIFTL and DSHIFTR
   13622             for combined left and right shifts, MASKL and MASKR for simple
   13623             left and right justified masks, MERGE_BITS for a bitwise merge
   13624             using a mask, SHIFTA, SHIFTL and SHIFTR for shift operations,
   13625             and the transformational bit intrinsics IALL, IANY and
   13626             IPARITY.
   13627           + Support of the EXECUTE_COMMAND_LINE intrinsic subroutine.
   13628           + Support for the IMPURE attribute for procedures, which allows
   13629             for ELEMENTAL procedures without the restrictions of PURE.
   13630           + Null pointers (including NULL()) and not allocated variables
   13631             can be used as actual argument to optional non-pointer,
   13632             non-allocatable dummy arguments, denoting an absent argument.
   13633           + Non-pointer variables with TARGET attribute can be used as
   13634             actual argument to POINTER dummies with INTENT(IN)
   13635           + Pointers including procedure pointers and those in a derived
   13636             type (pointer components) can now be initialized by a target
   13637             instead of only by NULL.
   13638           + The EXIT statement (with construct-name) can now be used to
   13639             leave not only the DO but also the ASSOCIATE, BLOCK, IF,
   13640             SELECT CASE and SELECT TYPE constructs.
   13641           + Internal procedures can now be used as actual argument.
   13642           + The named constants INTEGER_KINDS, LOGICAL_KINDS, REAL_KINDS
   13643             and CHARACTER_KINDS of the intrinsic module ISO_FORTRAN_ENV
   13644             have been added; these arrays contain the supported kind
   13645             values for the respective types.
   13646           + The module procedures C_SIZEOF of the intrinsic module
   13647             ISO_C_BINDINGS and COMPILER_VERSION and COMPILER_OPTIONS of
   13648             ISO_FORTRAN_ENV have been implemented.
   13649           + Minor changes: obsolescence diagnostics for ENTRY was added
   13650             for -std=f2008; a line may start with a semicolon; for
   13651             internal and module procedures END can be used instead of END
   13652             SUBROUTINE and END FUNCTION; SELECTED_REAL_KIND now also takes
   13653             a RADIX argument; intrinsic types are supported for
   13654             TYPE(intrinsic-type-spec); multiple type-bound procedures can
   13655             be declared in a single PROCEDURE statement; implied-shape
   13656             arrays are supported for named constants (PARAMETER). The
   13657             transformational, three argument versions of BESSEL_JN and
   13658             BESSEL_YN were added - the elemental, two-argument version had
   13659             been added in GCC 4.4; note that the transformational
   13660             functions use a recurrence algorithm.
   13661 
   13662   [22]Go
   13663 
   13664    Support for the Go programming language has been added to GCC. It is
   13665    not enabled by default when you build GCC; use the --enable-languages
   13666    configure option to build it. The driver program for compiling Go code
   13667    is gccgo.
   13668 
   13669    Go is currently known to work on GNU/Linux and RTEMS. Solaris support
   13670    is in progress. It may or may not work on other platforms.
   13671 
   13672   [23]Objective-C and Objective-C++
   13673 
   13674      * The -fobjc-exceptions flag is now required to enable Objective-C
   13675        exception and synchronization syntax (introduced by the keywords
   13676        @try, @catch, @finally and @synchronized).
   13677      * A number of Objective-C 2.0 features and extensions are now
   13678        supported by GCC. These features are enabled by default; you can
   13679        disable them by using the new -fobjc-std=objc1 command-line option.
   13680      * The Objective-C 2.0 dot-syntax is now supported. It is an
   13681        alternative syntax for using getters and setters; object.count is
   13682        automatically converted into [object count] or [object setCount:
   13683        ...] depending on context; for example if (object.count > 0) is
   13684        automatically compiled into the equivalent of if ([object count] >
   13685        0) while object.count = 0; is automatically compiled into the
   13686        equivalent ot [object setCount: 0];. The dot-syntax can be used
   13687        with instance and class objects and with any setters or getters, no
   13688        matter if they are part of a declared property or not.
   13689      * Objective-C 2.0 declared properties are now supported. They are
   13690        declared using the new @property keyword, and are most commonly
   13691        used in conjunction with the new Objective-C 2.0 dot-syntax. The
   13692        nonatomic, readonly, readwrite, assign, retain, copy, setter and
   13693        getter attributes are all supported. Marking declared properties
   13694        with __attribute__ ((deprecated)) is supported too.
   13695      * The Objective-C 2.0 @synthesize and @dynamic keywords are
   13696        supported. @synthesize causes the compiler to automatically
   13697        synthesize a declared property, while @dynamic is used to disable
   13698        all warnings for a declared property for which no implementation is
   13699        provided at compile time. Synthesizing declared properties requires
   13700        runtime support in most useful cases; to be able to use it with the
   13701        GNU runtime, appropriate helper functions have been added to the
   13702        GNU Objective-C runtime ABI, and are implemented by the GNU
   13703        Objective-C runtime library shipped with GCC.
   13704      * The Objective-C 2.0 fast enumeration syntax is supported in
   13705        Objective-C. This is currently not yet available in Objective-C++.
   13706        Fast enumeration requires support in the runtime, and such support
   13707        has been added to the GNU Objective-C runtime library (shipped with
   13708        GCC).
   13709      * The Objective-C 2.0 @optional keyword is supported. It allows you
   13710        to mark methods or properties in a protocol as optional as opposed
   13711        to required.
   13712      * The Objective-C 2.0 @package keyword is supported. It has currently
   13713        the same effect as the @public keyword.
   13714      * Objective-C 2.0 method attributes are supported. Currently the
   13715        supported attributes are deprecated, sentinel, noreturn and format.
   13716      * Objective-C 2.0 method argument attributes are supported. The most
   13717        widely used attribute is unused, to mark an argument as unused in
   13718        the implementation.
   13719      * Objective-C 2.0 class and protocol attributes are supported.
   13720        Currently the only supported attribute is deprecated.
   13721      * Objective-C 2.0 class extensions are supported. A class extension
   13722        has the same syntax as a category declaration with no category
   13723        name, and the methods and properties declared in it are added
   13724        directly to the main class. It is mostly used as an alternative to
   13725        a category to add methods to a class without advertising them in
   13726        the public headers, with the advantage that for class extensions
   13727        the compiler checks that all the privately declared methods are
   13728        actually implemented.
   13729      * As a result of these enhancements, GCC can now be used to build
   13730        Objective-C and Objective-C++ software that uses Foundation and
   13731        other important system frameworks with the NeXT runtime on Darwin 9
   13732        and Darwin 10 (OSX 10.5 and 10.6).
   13733      * Many bugs in the compiler have been fixed in this release; in
   13734        particular, LTO can now be used when compiling Objective-C and
   13735        Objective-C++ and the parser is much more robust in dealing with
   13736        invalid code.
   13737 
   13738     Runtime Library (libobjc)
   13739 
   13740      * The GNU Objective-C runtime library now defines the macro
   13741        __GNU_LIBOBJC__ (with a value that is increased at every release
   13742        where there is any change to the API) in objc/objc.h, making it
   13743        easy to determine if the GNU Objective-C runtime library is being
   13744        used, and if so, which version. Previous versions of the GNU
   13745        Objective-C runtime library (and other Objective-C runtime
   13746        libraries such as the Apple one) do not define this macro.
   13747      * A new Objective-C 2.0 API, almost identical to the one implemented
   13748        by the Apple Objective-C runtime, has been implemented in the GNU
   13749        Objective-C runtime library. The new API hides the internals of
   13750        most runtime structures but provides a more extensive set of
   13751        functions to operate on them. It is much easier, for example, to
   13752        create or modify classes at runtime. The new API also makes it
   13753        easier to port software from Apple to GNU as almost no changes
   13754        should be required. The old API is still supported for backwards
   13755        compatibility; including the old objc/objc-api.h header file
   13756        automatically selects the old API, while including the new
   13757        objc/runtime.h header file automatically selects the new API.
   13758        Support for the old API is being phased out and upgrading the
   13759        software to use the new API is strongly recommended. To check for
   13760        the availability of the new API, the __GNU_LIBOBJC__ macro can be
   13761        used as older versions of the GNU Objective-C runtime library,
   13762        which do not support the new API, do not define such a macro.
   13763      * Runtime support for @synchronized has been added.
   13764      * Runtime support for Objective-C 2.0 synthesized property accessors
   13765        has been added.
   13766      * Runtime support for Objective-C 2.0 fast enumeration has been
   13767        added.
   13768 
   13769 [24]New Targets and Target Specific Improvements
   13770 
   13771   [25]ARM
   13772 
   13773      * GCC now supports the Cortex-M4 processor implementing the v7-em
   13774        version of the architecture using the option -mcpu=cortex-m4.
   13775      * Scheduling descriptions for the Cortex-M4, the Neon and the
   13776        floating point units of the Cortex-A9 and a pipeline description
   13777        for the Cortex-A5 have been added.
   13778      * Synchronization primitives such as __sync_fetch_and_add and friends
   13779        are now inlined for supported architectures rather than calling
   13780        into a kernel helper function.
   13781      * SSA loop prefetching is enabled by default for the Cortex-A9 at
   13782        -O3.
   13783      * Several improvements were committed to improve code generation for
   13784        the ARM architecture including a rewritten implementation for load
   13785        and store multiples.
   13786      * Several enhancements were committed to improve SIMD code generation
   13787        for NEON by adding support for widening instructions, misaligned
   13788        loads and stores, vector conditionals and support for 64-bit
   13789        arithmetic.
   13790      * Support was added for the Faraday cores fa526, fa606te, fa626te,
   13791        fmp626te, fmp626 and fa726te and can be used with the respective
   13792        names as parameters to the -mcpu= option.
   13793      * Basic support was added for Cortex-A15 and is available through
   13794        -mcpu=cortex-a15.
   13795      * GCC for AAPCS configurations now more closely adheres to the AAPCS
   13796        specification by enabling -fstrict-volatile-bitfields by default.
   13797 
   13798   IA-32/x86-64
   13799 
   13800      * The new -fsplit-stack option permits programs to use a
   13801        discontiguous stack. This is useful for threaded programs, in that
   13802        it is no longer necessary to specify the maximum stack size when
   13803        creating a thread. This feature is currently only implemented for
   13804        32-bit and 64-bit x86 GNU/Linux targets.
   13805      * Support for emitting profiler counter calls before function
   13806        prologues. This is enabled via a new command-line option -mfentry.
   13807      * Optimization for the Intel Core 2 processors is now available
   13808        through the -march=core2 and -mtune=core2 options.
   13809      * Support for Intel Core i3/i5/i7 processors is now available through
   13810        the -march=corei7 and -mtune=corei7 options.
   13811      * Support for Intel Core i3/i5/i7 processors with AVX is now
   13812        available through the -march=corei7-avx and -mtune=corei7-avx
   13813        options.
   13814      * Support for AMD Bobcat (family 14) processors is now available
   13815        through the -march=btver1 and -mtune=btver1 options.
   13816      * Support for AMD Bulldozer (family 15) processors is now available
   13817        through the -march=bdver1 and -mtune=bdver1 options.
   13818      * The default setting (when not optimizing for size) for 32-bit
   13819        GNU/Linux and Darwin x86 targets has been changed to
   13820        -fomit-frame-pointer. The default can be reverted to
   13821        -fno-omit-frame-pointer by configuring GCC with the
   13822        --enable-frame-pointer configure option.
   13823      * Darwin, FreeBSD, Solaris 2, MinGW and Cygwin now all support
   13824        __float128 on 32-bit and 64-bit x86 targets.
   13825      * AVX floating-point arithmetic can now be enabled by default at
   13826        configure time with the new --with-fpmath=avx option.
   13827      * The SSA loop prefetching pass is enabled when using -O3 when
   13828        optimizing for CPUs where prefetching is beneficial (AMD CPUs newer
   13829        than K6).
   13830      * Support for TBM (Trailing Bit Manipulation) built-in functions and
   13831        code generation is available via -mtbm.
   13832      * Support for AMD's BMI (Bit Manipulation) built-in functions and
   13833        code generation is available via -mbmi.
   13834 
   13835   [26]MicroBlaze
   13836 
   13837      * Support has been added for the Xilinx MicroBlaze softcore processor
   13838        (microblaze-elf) embedded target. This configurable processor is
   13839        supported on several Xilinx Spartan and Virtex FPGAs.
   13840 
   13841   MIPS
   13842 
   13843      * GCC now supports the Loongson 3A processor. Its canonical -march=
   13844        and -mtune= name is loongson3a.
   13845 
   13846   [27]MN10300 / AM33
   13847 
   13848      * The inline assembly register constraint "A" has been renamed "c".
   13849        This constraint is used to select a floating-point register that
   13850        can be used as the destination of a multiply-accumulate
   13851        instruction.
   13852      * New inline assembly register constraints "A" and "D" have been
   13853        added. These constraint letters resolve to all general registers
   13854        when compiling for AM33, and resolve to address registers only or
   13855        data registers only when compiling for MN10300.
   13856      * The MDR register is represented in the compiler. One can access the
   13857        register via the "z" constraint in inline assembly. It can be
   13858        marked as clobbered or used as a local register variable via the
   13859        "mdr" name. The compiler uses the RETF instruction if the function
   13860        does not modify the MDR register, so it is important that inline
   13861        assembly properly annotate any usage of the register.
   13862 
   13863   PowerPC/PowerPC64
   13864 
   13865      * GCC now supports the Applied Micro Titan processor with
   13866        -mcpu=titan.
   13867      * The -mrecip option has been added, which indicates whether the
   13868        reciprocal and reciprocal square root instructions should be used.
   13869      * The -mveclibabi=mass option can be used to enable the compiler to
   13870        autovectorize mathematical functions using the Mathematical
   13871        Acceleration Subsystem library.
   13872      * The -msingle-pic-base option has been added, which instructs the
   13873        compiler to avoid loading the PIC base register in function
   13874        prologues. The PIC base register must be initialized by the runtime
   13875        system.
   13876      * The -mblock-move-inline-limit option has been added, which enables
   13877        the user to control the maximum size of inlined memcpy calls and
   13878        similar.
   13879      * PowerPC64 GNU/Linux support for applications requiring a large TOC
   13880        section has been improved. A new command-line option,
   13881        -mcmodel=MODEL, controls this feature; valid values for MODEL are
   13882        small, medium, or large.
   13883      * The Altivec builtin functions vec_ld and vec_st have been modified
   13884        to generate the Altivec memory instructions LVX and STVX, even if
   13885        the -mvsx option is used. In the initial GCC 4.5 release, these
   13886        builtin functions were changed to generate VSX memory reference
   13887        instructions instead of Altivec memory instructions, but there are
   13888        differences between the two instructions. If the VSX instruction
   13889        set is available, you can now use the new builtin functions
   13890        vec_vsx_ld and vec_vsx_st which always generates the VSX memory
   13891        instructions.
   13892      * The GCC compiler on AIX now defaults to a process layout with a
   13893        larger data space allowing larger programs to be compiled.
   13894      * The GCC long double type on AIX 6.1 and above has reverted to
   13895        64-bit double precision, matching the AIX XL compiler default,
   13896        because of missing C99 symbols required by the GCC runtime.
   13897      * The default processor scheduling model and tuning for PowerPC64
   13898        GNU/Linux and for AIX 6.1 and above now is POWER7.
   13899      * Starting with GCC 4.6.1, vectors of type vector long long or vector
   13900        long are passed and returned in the same method as other vectors
   13901        with the VSX instruction set. Previously the GCC compiler did not
   13902        adhere to the ABI for 128-bit vectors with 64-bit integer base
   13903        types (PR 48857). This is also fixed in the GCC 4.5.4 release.
   13904 
   13905   S/390, zSeries and System z9/z10, IBM zEnterprise z196
   13906 
   13907      * Support for the zEnterprise z196 processor has been added. When
   13908        using the -march=z196 option, the compiler will generate code
   13909        making use of the following instruction facilities:
   13910           + Conditional load/store
   13911           + Distinct-operands
   13912           + Floating-point-extension
   13913           + Interlocked-access
   13914           + Population-count
   13915        The -mtune=z196 option avoids the compare and branch instructions
   13916        as well as the load address instruction with an index register as
   13917        much as possible and performs instruction scheduling appropriate
   13918        for the new out-of-order pipeline architecture.
   13919      * When using the -m31 -mzarch options the generated code still
   13920        conforms to the 32-bit ABI but uses the general purpose registers
   13921        as 64-bit registers internally. This requires a Linux kernel saving
   13922        the whole 64-bit registers when doing a context switch. Kernels
   13923        providing that feature indicate that by the 'highgprs' string in
   13924        /proc/cpuinfo.
   13925      * The SSA loop prefetching pass is enabled when using -O3.
   13926 
   13927   SPARC
   13928 
   13929      * GCC now supports the LEON series of SPARC V8 processors. The code
   13930        generated by the compiler can either be tuned to it by means of the
   13931        --with-tune=leon configure option and -mtune=leon compilation
   13932        option, or the compiler can be built for the sparc-leon-{elf,linux}
   13933        and sparc-leon3-{elf,linux} targets directly.
   13934      * GCC has stopped sign/zero-extending parameter registers in the
   13935        callee for functions taking parameters with sub-word size in 32-bit
   13936        mode, since this is redundant with the specification of the ABI.
   13937        GCC has never done so in 64-bit mode since this is also redundant.
   13938      * The command-line option -mfix-at697f has been added to enable the
   13939        documented workaround for the single erratum of the Atmel AT697F
   13940        processor.
   13941 
   13942 [28]Operating Systems
   13943 
   13944   [29]Android
   13945 
   13946      * GCC now supports the Bionic C library and provides a convenient way
   13947        of building native libraries and applications for the Android
   13948        platform. Refer to the documentation of the -mandroid and -mbionic
   13949        options for details on building native code. At the moment, Android
   13950        support is enabled only for ARM.
   13951 
   13952   [30]Darwin/Mac OS X
   13953 
   13954      * General
   13955           + Initial support for CFString types has been added.
   13956             This allows GCC to build projects including the system Core
   13957             Foundation frameworks. The GCC Objective-C family supports
   13958             CFString "toll-free bridged" as per the Mac OS X system tools.
   13959             CFString is also recognized in the context of format
   13960             attributes and arguments (see the documentation for format
   13961             attributes for limitations). At present, 8-bit character types
   13962             are supported.
   13963           + Object file size reduction.
   13964             The Darwin zeroed memory allocators have been re-written to
   13965             make more use of .zerofill sections. For non-debug code, this
   13966             can reduce object file size significantly.
   13967           + Objective-C family 64-bit support (NeXT ABI 2).
   13968             Initial support has been added to support 64-bit Objective-C
   13969             code using the Darwin/OS X native (NeXT) runtime. ABI version
   13970             2 will be selected automatically when 64-bit code is built.
   13971           + Objective-C family 32-bit ABI 1.
   13972             For 32-bit code ABI 1 is also now also allowed. At present it
   13973             must be selected manually using -fobjc-abi-version=1 where
   13974             applicable - i.e. on Darwin 9/10 (OS X 10.5/10.6).
   13975      * x86 Architecture
   13976           + The -mdynamic-no-pic option has been enabled.
   13977             Code supporting -mdynamic-no-pic optimization has been added
   13978             and is applicable to -m32 builds. The compiler bootstrap uses
   13979             the option where appropriate.
   13980           + The default value for -mtune= has been changed.
   13981             Since Darwin systems are primarily Xeon, Core-2 or similar the
   13982             default tuning has been changed to -mtune=core2.
   13983           + Enable 128-bit long double (__float128) support on Darwin.
   13984      * PPC Architecture
   13985           + Darwin64 ABI.
   13986             Several significant bugs have been fixed, such that GCC now
   13987             produces code compatible with the Darwin64 PowerPC ABI.
   13988           + libffi and boehm-gc.
   13989             The Darwin ports of the libffi and boehm-gc libraries have
   13990             been upgraded to include a Darwin64 implementation. This means
   13991             that powerpc*-*-darwin9 platforms may now, for example, build
   13992             Java applications with -m64 enabled.
   13993           + Plug-in support has been enabled.
   13994           + The -fsection-anchors option is now available although,
   13995             presently, not heavily tested.
   13996 
   13997   [31]Solaris 2
   13998 
   13999     New Features
   14000 
   14001      * Support symbol versioning with the Sun linker.
   14002      * Allow libstdc++ to leverage full ISO C99 support on Solaris 10+.
   14003      * Support thread-local storage (TLS) with the Sun assembler on
   14004        Solaris 2/x86.
   14005      * Support TLS on Solaris 8/9 if prerequisites are met.
   14006      * Support COMDAT group with the GNU assembler and recent Sun linker.
   14007      * Support the Sun assembler visibility syntax.
   14008      * Default Solaris 2/x86 to -march=pentium4 (Solaris 10+) resp.
   14009        -march=pentiumpro (Solaris 8/9).
   14010      * Don't use SSE on Solaris 8/9 x86 by default.
   14011      * Enable 128-bit long double (__float128) support on Solaris 2/x86.
   14012 
   14013     ABI Change
   14014 
   14015      * Change the ABI for returning 8-byte vectors like __m64 in MMX
   14016        registers on Solaris 10+/x86 to match the Sun Studio 12.1+
   14017        compilers. This is an incompatible change. If you use such types,
   14018        you must either recompile all your code with the new compiler or
   14019        use the new -mvect8-ret-in-mem option to remain compatible with
   14020        previous versions of GCC and Sun Studio.
   14021 
   14022   [32]Windows x86/x86_64
   14023 
   14024      * Initial support for decimal floating point.
   14025      * Support for the __thiscall calling-convention.
   14026      * Support for hot-patchable function prologues via the
   14027        ms_hook_prologue attribute for x86_64 in addition to 32-bit x86.
   14028      * Improvements of stack-probing and stack-allocation mechanisms.
   14029      * Support of push/pop-macro pragma as preprocessor command.
   14030        With #pragma push_macro("macro-name") the current definition of
   14031        macro-name is saved and can be restored with #pragma
   14032        pop_macro("macro-name") to its saved definition.
   14033      * Enable 128-bit long double (__float128) support on MinGW and
   14034        Cygwin.
   14035 
   14036 Other significant improvements
   14037 
   14038   Installation changes
   14039 
   14040      * An install-strip make target is provided that installs stripped
   14041        executables, and may install libraries with unneeded or debugging
   14042        sections stripped.
   14043      * On Power7 systems, there is a potential problem if you build the
   14044        GCC compiler with a host compiler using options that enable the VSX
   14045        instruction set generation. If the host compiler has been patched
   14046        so that the vec_ld and vec_st builtin functions generate Altivec
   14047        memory instructions instead of VSX memory instructions, then you
   14048        should be able to build the compiler with VSX instruction
   14049        generation.
   14050 
   14051 Changes for GCC Developers
   14052 
   14053    Note: these changes concern developers that develop GCC itself or
   14054    software that integrates with GCC, such as plugins, and not the general
   14055    GCC users.
   14056      * The gengtype utility, which previously was internal to the GCC
   14057        build process, has been enchanced to provide GC root information
   14058        for plugins as necessary.
   14059      * The old GC allocation interface of ggc_alloc and friends was
   14060        replaced with a type-safe alternative.
   14061 
   14062 [33]GCC 4.6.1
   14063 
   14064    This is the [34]list of problem reports (PRs) from GCC's bug tracking
   14065    system that are known to be fixed in the 4.6.1 release. This list might
   14066    not be complete (that is, it is possible that some PRs that have been
   14067    fixed are not listed here).
   14068 
   14069 [35]GCC 4.6.2
   14070 
   14071    This is the [36]list of problem reports (PRs) from GCC's bug tracking
   14072    system that are known to be fixed in the 4.6.2 release. This list might
   14073    not be complete (that is, it is possible that some PRs that have been
   14074    fixed are not listed here).
   14075 
   14076 [37]GCC 4.6.3
   14077 
   14078    This is the [38]list of problem reports (PRs) from GCC's bug tracking
   14079    system that are known to be fixed in the 4.6.3 release. This list might
   14080    not be complete (that is, it is possible that some PRs that have been
   14081    fixed are not listed here).
   14082 
   14083 [39]GCC 4.6.4
   14084 
   14085    This is the [40]list of problem reports (PRs) from GCC's bug tracking
   14086    system that are known to be fixed in the 4.6.4 release. This list might
   14087    not be complete (that is, it is possible that some PRs that have been
   14088    fixed are not listed here).
   14089 
   14090 
   14091     For questions related to the use of GCC, please consult these web
   14092     pages and the [41]GCC manuals. If that fails, the
   14093     [42]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   14094     web pages and the development of GCC are welcome on our developer
   14095     list at [43]gcc (a] gcc.gnu.org. All of [44]our lists have public
   14096     archives.
   14097 
   14098    Copyright (C) [45]Free Software Foundation, Inc. Verbatim copying and
   14099    distribution of this entire article is permitted in any medium,
   14100    provided this notice is preserved.
   14101 
   14102    These pages are [46]maintained by the GCC team. Last modified
   14103    2025-01-31.
   14104 
   14105 References
   14106 
   14107    1. https://sourceware.org/bugzilla/show_bug.cgi?id=10401
   14108    2. https://gcc.gnu.org/gcc-4.5/changes.html
   14109    3. https://gcc.gnu.org/gcc-4.5/changes.html#obsoleted
   14110    4. https://gcc.gnu.org/gcc-4.6/porting_to.html
   14111    5. https://gcc.gnu.org/projects/lto/whopr.pdf
   14112    6. https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#Warning-Options
   14113    7. https://gcc.gnu.org/gcc-4.6/changes.html#c
   14114    8. https://gcc.gnu.org/gcc-4.6/changes.html#cplusplus
   14115    9. https://gcc.gnu.org/gcc-4.6/cxx0x_status.html
   14116   10. https://gcc.gnu.org/PR43145
   14117   11. https://gcc.gnu.org/PR43680
   14118   12. https://gcc.gnu.org/PR33558
   14119   13. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#253
   14120   14. https://gcc.gnu.org/onlinedocs/gcc-4.6.4/libstdc++/manual/manual/status.html#status.iso.200x
   14121   15. https://gcc.gnu.org/onlinedocs/libstdc++/manual/debug_mode.html
   14122   16. https://gcc.gnu.org/onlinedocs/libstdc++/manual/debug.html#debug.races
   14123   17. https://gcc.gnu.org/gcc-4.6/changes.html#fortran
   14124   18. https://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html
   14125   19. https://gcc.gnu.org/wiki/OOP
   14126   20. https://gcc.gnu.org/wiki/Coarray
   14127   21. https://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfcoarray_007d-233
   14128   22. https://gcc.gnu.org/gcc-4.6/changes.html#go
   14129   23. https://gcc.gnu.org/gcc-4.6/changes.html#objective-c
   14130   24. https://gcc.gnu.org/gcc-4.6/changes.html#targets
   14131   25. https://gcc.gnu.org/gcc-4.6/changes.html#arm
   14132   26. https://gcc.gnu.org/gcc-4.6/changes.html#microblaze
   14133   27. https://gcc.gnu.org/gcc-4.6/changes.html#mn10300
   14134   28. https://gcc.gnu.org/gcc-4.6/changes.html#os
   14135   29. https://gcc.gnu.org/gcc-4.6/changes.html#android
   14136   30. https://gcc.gnu.org/gcc-4.6/changes.html#darwin
   14137   31. https://gcc.gnu.org/gcc-4.6/changes.html#solaris
   14138   32. https://gcc.gnu.org/gcc-4.6/changes.html#windows
   14139   33. https://gcc.gnu.org/gcc-4.6/changes.html#GCC4.6.1
   14140   34. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.6.1
   14141   35. https://gcc.gnu.org/gcc-4.6/changes.html#GCC4.6.2
   14142   36. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.6.2
   14143   37. https://gcc.gnu.org/gcc-4.6/changes.html#GCC4.6.3
   14144   38. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.6.3
   14145   39. https://gcc.gnu.org/gcc-4.6/changes.html#GCC4.6.4
   14146   40. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.6.4
   14147   41. https://gcc.gnu.org/onlinedocs/
   14148   42. mailto:gcc-help (a] gcc.gnu.org
   14149   43. mailto:gcc (a] gcc.gnu.org
   14150   44. https://gcc.gnu.org/lists.html
   14151   45. https://www.fsf.org/
   14152   46. https://gcc.gnu.org/about.html
   14153 ======================================================================
   14154 http://gcc.gnu.org/gcc-4.5/index.html
   14155 
   14156                              GCC 4.5 Release Series
   14157 
   14158    (This release series is no longer supported.)
   14159 
   14160    Jul 2, 2012
   14161 
   14162    The [1]GNU project and the GCC developers are pleased to announce the
   14163    release of GCC 4.5.4.
   14164 
   14165    This release is a bug-fix release, containing fixes for regressions in
   14166    GCC 4.5.3 relative to previous releases of GCC.
   14167 
   14168 Release History
   14169 
   14170    GCC 4.5.4
   14171           Jul 2, 2012 ([2]changes)
   14172 
   14173    GCC 4.5.3
   14174           Apr 28, 2011 ([3]changes)
   14175 
   14176    GCC 4.5.2
   14177           Dec 16, 2010 ([4]changes)
   14178 
   14179    GCC 4.5.1
   14180           Jul 31, 2010 ([5]changes)
   14181 
   14182    GCC 4.5.0
   14183           April 14, 2010 ([6]changes)
   14184 
   14185 References and Acknowledgements
   14186 
   14187    GCC used to stand for the GNU C Compiler, but since the compiler
   14188    supports several other languages aside from C, it now stands for the
   14189    GNU Compiler Collection.
   14190 
   14191    A list of [7]successful builds is updated as new information becomes
   14192    available.
   14193 
   14194    The GCC developers would like to thank the numerous people that have
   14195    contributed new features, improvements, bug fixes, and other changes as
   14196    well as test results to GCC. This [8]amazing group of volunteers is
   14197    what makes GCC successful.
   14198 
   14199    For additional information about GCC please refer to the [9]GCC project
   14200    web site or contact the [10]GCC development mailing list.
   14201 
   14202    To obtain GCC please use [11]our mirror sites or [12]our version
   14203    control system.
   14204 
   14205 
   14206     For questions related to the use of GCC, please consult these web
   14207     pages and the [13]GCC manuals. If that fails, the
   14208     [14]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   14209     web pages and the development of GCC are welcome on our developer
   14210     list at [15]gcc (a] gcc.gnu.org. All of [16]our lists have public
   14211     archives.
   14212 
   14213    Copyright (C) [17]Free Software Foundation, Inc. Verbatim copying and
   14214    distribution of this entire article is permitted in any medium,
   14215    provided this notice is preserved.
   14216 
   14217    These pages are [18]maintained by the GCC team. Last modified
   14218    2022-10-26.
   14219 
   14220 References
   14221 
   14222    1. http://www.gnu.org/
   14223    2. https://gcc.gnu.org/gcc-4.5/changes.html
   14224    3. https://gcc.gnu.org/gcc-4.5/changes.html
   14225    4. https://gcc.gnu.org/gcc-4.5/changes.html
   14226    5. https://gcc.gnu.org/gcc-4.5/changes.html
   14227    6. https://gcc.gnu.org/gcc-4.5/changes.html
   14228    7. https://gcc.gnu.org/gcc-4.5/buildstat.html
   14229    8. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   14230    9. https://gcc.gnu.org/index.html
   14231   10. mailto:gcc (a] gcc.gnu.org
   14232   11. https://gcc.gnu.org/mirrors.html
   14233   12. https://gcc.gnu.org/git.html
   14234   13. https://gcc.gnu.org/onlinedocs/
   14235   14. mailto:gcc-help (a] gcc.gnu.org
   14236   15. mailto:gcc (a] gcc.gnu.org
   14237   16. https://gcc.gnu.org/lists.html
   14238   17. https://www.fsf.org/
   14239   18. https://gcc.gnu.org/about.html
   14240 ======================================================================
   14241 http://gcc.gnu.org/gcc-4.5/changes.html
   14242 
   14243                              GCC 4.5 Release Series
   14244                         Changes, New Features, and Fixes
   14245 
   14246 Caveats
   14247 
   14248      * GCC now requires the [1]MPC library in order to build. See the
   14249        [2]prerequisites page for version requirements.
   14250      * Support for a number of older systems and recently unmaintained or
   14251        untested target ports of GCC has been declared obsolete in GCC 4.5.
   14252        Unless there is activity to revive them, the next release of GCC
   14253        will have their sources permanently removed.
   14254        The following ports for individual systems on particular
   14255        architectures have been obsoleted:
   14256           + IRIX releases before 6.5 (mips-sgi-irix5*,
   14257             mips-sgi-irix6.[0-4])
   14258           + Solaris 7 (*-*-solaris2.7)
   14259           + Tru64 UNIX releases before V5.1 (alpha*-dec-osf4*,
   14260             alpha-dec-osf5.0*)
   14261           + Details for the IRIX, Solaris 7, and Tru64 UNIX obsoletions
   14262             can be found in the [3]announcement.
   14263        Support for the classic POWER architecture implemented in the
   14264        original RIOS and RIOS2 processors of the old IBM RS/6000 product
   14265        line has been obsoleted in the rs6000 port. This does not affect
   14266        the new generation Power and PowerPC architectures.
   14267      * Support has been removed for all the [4]configurations obsoleted in
   14268        GCC 4.4.
   14269      * Support has been removed for the protoize and unprotoize utilities,
   14270        obsoleted in GCC 4.4.
   14271      * Support has been removed for tuning for Itanium1 (Merced) variants.
   14272        Note that code tuned for Itanium2 should also run correctly on
   14273        Itanium1.
   14274      * GCC now generates unwind info also for epilogues. DWARF debuginfo
   14275        generated by GCC now uses more features of DWARF3 than before, and
   14276        also some DWARF4 features. GDB older than 7.0 is not able to handle
   14277        either of these, so to debug GCC 4.5 generated binaries or
   14278        libraries GDB 7.0 or later is needed. You can disable use of DWARF4
   14279        features with the -gdwarf-3 -gstrict-dwarf options, or use
   14280        -gdwarf-2 -gstrict-dwarf to restrict GCC to just DWARF2, but
   14281        epilogue unwind info is emitted unconditionally whenever unwind
   14282        info is emitted.
   14283      * On x86 targets, code containing floating-point calculations may run
   14284        significantly more slowly when compiled with GCC 4.5 in strict C99
   14285        conformance mode than they did with earlier GCC versions. This is
   14286        due to stricter standard conformance of the compiler and can be
   14287        avoided by using the option -fexcess-precision=fast; also see
   14288        [5]below.
   14289      * The function attribute noinline no longer prevents GCC from cloning
   14290        the function. A new attribute noclone has been introduced for this
   14291        purpose. Cloning a function means that it is duplicated and the new
   14292        copy is specialized for certain contexts (for example when a
   14293        parameter is a known constant).
   14294 
   14295 General Optimizer Improvements
   14296 
   14297      * The -save-temps now takes an optional argument. The -save-temps and
   14298        -save-temps=cwd switches write the temporary files in the current
   14299        working directory based on the original source file. The
   14300        -save-temps=obj switch will write files into the directory
   14301        specified with the -o option, and the intermediate filenames are
   14302        based on the output file. This will allow the user to get the
   14303        compiler intermediate files when doing parallel builds without two
   14304        builds of the same filename located in different directories from
   14305        interfering with each other.
   14306      * Debugging dumps are now created in the same directory as the object
   14307        file rather than in the current working directory. This allows the
   14308        user to get debugging dumps when doing parallel builds without two
   14309        builds of the same filename interfering with each other.
   14310      * GCC has been integrated with the MPC library. This allows GCC to
   14311        evaluate complex arithmetic at compile time [6]more accurately. It
   14312        also allows GCC to evaluate calls to complex built-in math
   14313        functions having constant arguments and replace them at compile
   14314        time with their mathematically equivalent results. In doing so, GCC
   14315        can generate correct results regardless of the math library
   14316        implementation or floating point precision of the host platform.
   14317        This also allows GCC to generate identical results regardless of
   14318        whether one compiles in native or cross-compile configurations to a
   14319        particular target. The following built-in functions take advantage
   14320        of this new capability: cacos, cacosh, casin, casinh, catan,
   14321        catanh, ccos, ccosh, cexp, clog, cpow, csin, csinh, csqrt, ctan,
   14322        and ctanh. The float and long double variants of these functions
   14323        (e.g. csinf and csinl) are also handled.
   14324      * A new link-time optimizer has been added ([7]-flto). When this
   14325        option is used, GCC generates a bytecode representation of each
   14326        input file and writes it to specially-named sections in each object
   14327        file. When the object files are linked together, all the function
   14328        bodies are read from these named sections and instantiated as if
   14329        they had been part of the same translation unit. This enables
   14330        interprocedural optimizations to work across different files (and
   14331        even different languages), potentially improving the performance of
   14332        the generated code. To use the link-timer optimizer, -flto needs to
   14333        be specified at compile time and during the final link. If the
   14334        program does not require any symbols to be exported, it is possible
   14335        to combine -flto and the experimental [8]-fwhopr with
   14336        [9]-fwhole-program to allow the interprocedural optimizers to use
   14337        more aggressive assumptions.
   14338      * The automatic parallelization pass was enhanced to support
   14339        parallelization of outer loops.
   14340      * Automatic parallelization can be enabled as part of Graphite. In
   14341        addition to -ftree-parallelize-loops=, specify
   14342        -floop-parallelize-all to enable the Graphite-based optimization.
   14343      * The infrastructure for optimizing based on [10]restrict qualified
   14344        pointers has been rewritten and should result in code generation
   14345        improvements. Optimizations based on restrict qualified pointers
   14346        are now also available when using -fno-strict-aliasing.
   14347      * There is a new optimization pass that attempts to change prototype
   14348        of functions to avoid unused parameters, pass only relevant parts
   14349        of structures and turn arguments passed by reference to arguments
   14350        passed by value when possible. It is enabled by -O2 and above as
   14351        well as -Os and can be manually invoked using the new command-line
   14352        switch -fipa-sra.
   14353      * GCC now optimize exception handling code. In particular cleanup
   14354        regions that are proved to not have any effect are optimized out.
   14355 
   14356 New Languages and Language specific improvements
   14357 
   14358   All languages
   14359 
   14360      * The -fshow-column option is now on by default. This means error
   14361        messages now have a column associated with them.
   14362 
   14363   Ada
   14364 
   14365      * Compilation of programs heavily using discriminated record types
   14366        with variant parts has been sped up and generates more compact
   14367        code.
   14368      * Stack checking now works reasonably well on most plaforms. In some
   14369        specific cases, stack overflows may still fail to be detected, but
   14370        a compile-time warning will be issued for these cases.
   14371 
   14372   C family
   14373 
   14374      * If a header named in a #include directive is not found, the
   14375        compiler exits immediately. This avoids a cascade of errors arising
   14376        from declarations expected to be found in that header being
   14377        missing.
   14378      * A new built-in function __builtin_unreachable() has been added that
   14379        tells the compiler that control will never reach that point. It may
   14380        be used after asm statements that terminate by transferring control
   14381        elsewhere, and in other places that are known to be unreachable.
   14382      * The -Wlogical-op option now warns for logical expressions such as
   14383        (c == 1 && c == 2) and (c != 1 || c != 2), which are likely to be
   14384        mistakes. This option is disabled by default.
   14385      * An asm goto feature has been added to allow asm statements that
   14386        jump to C labels.
   14387      * C++0x raw strings are supported for C++ and for C with -std=gnu99.
   14388      * The deprecated attribute now takes an optional string argument, for
   14389        example, __attribute__((deprecated("text string"))), that will be
   14390        printed together with the deprecation warning.
   14391 
   14392   C
   14393 
   14394      * The -Wenum-compare option, which warns when comparing values of
   14395        different enum types, now works for C. It formerly only worked for
   14396        C++. This warning is enabled by -Wall. It may be avoided by using a
   14397        type cast.
   14398      * The -Wcast-qual option now warns about casts which are unsafe in
   14399        that they permit const-correctness to be violated without further
   14400        warnings. Specifically, it warns about cases where a qualifier is
   14401        added when all the lower types are not const. For example, it warns
   14402        about a cast from char ** to const char **.
   14403      * The -Wc++-compat option is significantly improved. It issues new
   14404        warnings for:
   14405           + Using C++ reserved operator names as identifiers.
   14406           + Conversions to enum types without explicit casts.
   14407           + Using va_arg with an enum type.
   14408           + Using different enum types in the two branches of ?:.
   14409           + Using ++ or -- on a variable of enum type.
   14410           + Using the same name as both a struct, union or enum tag and a
   14411             typedef, unless the typedef refers to the tagged type itself.
   14412           + Using a struct, union, or enum which is defined within another
   14413             struct or union.
   14414           + A struct field defined using a typedef if there is a field in
   14415             the struct, or an enclosing struct, whose name is the typedef
   14416             name.
   14417           + Duplicate definitions at file scope.
   14418           + Uninitialized const variables.
   14419           + A global variable with an anonymous struct, union, or enum
   14420             type.
   14421           + Using a string constant to initialize a char array whose size
   14422             is the length of the string.
   14423      * The new -Wjump-misses-init option warns about cases where a goto or
   14424        switch skips the initialization of a variable. This sort of branch
   14425        is an error in C++ but not in C. This warning is enabled by
   14426        -Wc++-compat.
   14427      * GCC now ensures that a C99-conforming <stdint.h> is present on most
   14428        targets, and uses information about the types in this header to
   14429        implement the Fortran bindings to those types. GCC does not ensure
   14430        the presence of such a header, and does not implement the Fortran
   14431        bindings, on the following targets: NetBSD, VxWorks, VMS,
   14432        SymbianOS, WinCE, LynxOS, Netware, QNX, Interix, TPF.
   14433      * GCC now implements C90- and C99-conforming rules for constant
   14434        expressions. This may cause warnings or errors for some code using
   14435        expressions that can be folded to a constant but are not constant
   14436        expressions as defined by ISO C.
   14437      * All known target-independent C90 and C90 Amendment 1 conformance
   14438        bugs, and all known target-independent C99 conformance bugs not
   14439        related to floating point or extended identifiers, have been fixed.
   14440      * The C decimal floating point support now includes support for the
   14441        FLOAT_CONST_DECIMAL64 pragma.
   14442      * The named address space feature from ISO/IEC TR 18037 is now
   14443        supported. This is currently only implemented for the SPU
   14444        processor.
   14445 
   14446   [11]C++
   14447 
   14448      * Improved [12]experimental support for the upcoming C++0x ISO C++
   14449        standard, including support for raw strings, lambda expressions and
   14450        explicit type conversion operators.
   14451      * When printing the name of a class template specialization, G++ will
   14452        now omit any template arguments which come from default template
   14453        arguments. This behavior (and the pretty-printing of function
   14454        template specializations as template signature and arguments) can
   14455        be disabled with the -fno-pretty-templates option.
   14456      * Access control is now applied to typedef names used in a template,
   14457        which may cause G++ to reject some ill-formed code that was
   14458        accepted by earlier releases. The -fno-access-control option can be
   14459        used as a temporary workaround until the code is corrected.
   14460      * Compilation time for code that uses templates should now scale
   14461        linearly with the number of instantiations rather than
   14462        quadratically, as template instantiations are now looked up using
   14463        hash tables.
   14464      * Declarations of functions that look like builtin declarations of
   14465        library functions are only considered to be redeclarations if they
   14466        are declared with extern "C". This may cause problems with code
   14467        that omits extern "C" on hand-written declarations of C library
   14468        functions such as abort or memcpy. Such code is ill-formed, but was
   14469        accepted by earlier releases.
   14470      * Diagnostics that used to complain about passing non-POD types to
   14471        ... or jumping past the declaration of a non-POD variable now check
   14472        for triviality rather than PODness, as per C++0x.
   14473      * In C++0x mode local and anonymous classes are now allowed as
   14474        template arguments, and in declarations of variables and functions
   14475        with linkage, so long as any such declaration that is used is also
   14476        defined ([13]DR 757).
   14477      * Labels may now have attributes, as has been permitted for a while
   14478        in C. This is only permitted when the label definition and the
   14479        attribute specifier is followed by a semicolon--i.e., the label
   14480        applies to an empty statement. The only useful attribute for a
   14481        label is unused.
   14482      * G++ now implements [14]DR 176. Previously G++ did not support using
   14483        the injected-class-name of a template base class as a type name,
   14484        and lookup of the name found the declaration of the template in the
   14485        enclosing scope. Now lookup of the name finds the
   14486        injected-class-name, which can be used either as a type or as a
   14487        template, depending on whether or not the name is followed by a
   14488        template argument list. As a result of this change, some code that
   14489        was previously accepted may be ill-formed because
   14490          1. The injected-class-name is not accessible because it's from a
   14491             private base, or
   14492          2. The injected-class-name cannot be used as an argument for a
   14493             template template parameter.
   14494        In either of these cases, the code can be fixed by adding a
   14495        nested-name-specifier to explicitly name the template. The first
   14496        can be worked around with -fno-access-control; the second is only
   14497        rejected with -pedantic.
   14498      * A new standard mangling for SIMD vector types has been added, to
   14499        avoid name clashes on systems with vectors of varying length. By
   14500        default the compiler still uses the old mangling, but emits aliases
   14501        with the new mangling on targets that support strong aliases. Users
   14502        can switch over entirely to the new mangling with -fabi-version=4
   14503        or -fabi-version=0. -Wabi will now warn about code that uses the
   14504        old mangling.
   14505      * The command-line option -ftemplate-depth-N is now written as
   14506        -ftemplate-depth=N and the old form is deprecated.
   14507      * Conversions between NULL and non-pointer types are now warned by
   14508        default. The new option -Wno-conversion-null disables these
   14509        warnings. Previously these warnings were only available when using
   14510        -Wconversion explicitly.
   14511 
   14512     Runtime Library (libstdc++)
   14513 
   14514      * Improved experimental support for the upcoming ISO C++ standard,
   14515        C++0x, including:
   14516           + Support for <future>, <functional>, and <random>.
   14517           + Existing facilities now exploit explicit operators and the
   14518             newly implemented core C++0x features.
   14519           + The header <cstdatomic> has been renamed to <atomic>.
   14520      * An experimental [15]profile mode has been added. This is an
   14521        implementation of many C++ standard library constructs with an
   14522        additional analysis layer that gives performance improvement advice
   14523        based on recognition of suboptimal usage patterns. For example,
   14524 #include <vector>
   14525 int main()
   14526 {
   14527   std::vector<int> v;
   14528   for (int k = 0; k < 1024; ++k)
   14529     v.insert(v.begin(), k);
   14530 }
   14531 
   14532        When instrumented via the profile mode, can return suggestions
   14533        about the initial size and choice of the container used as follows:
   14534 vector-to-list: improvement = 5: call stack = 0x804842c ...
   14535     : advice = change std::vector to std::list
   14536 vector-size: improvement = 3: call stack = 0x804842c ...
   14537     : advice = change initial container size from 0 to 1024
   14538 
   14539        These constructs can be substituted for the normal libstdc++
   14540        constructs on a piecemeal basis, or all existing components can be
   14541        transformed via the -D_GLIBCXX_PROFILE macro.
   14542      * [16]Support for decimal floating-point arithmetic (aka ISO C++ TR
   14543        24733) has been added. This support is in header file
   14544        <decimal/decimal>, uses namespace std::decimal, and includes
   14545        classes decimal32, decimal64, and decimal128.
   14546      * Sources have been audited for application of function attributes
   14547        nothrow, const, pure, and noreturn.
   14548      * Python pretty-printers have been added for many standard library
   14549        components that simplify the internal representation and present a
   14550        more intuitive view of components when used with
   14551        appropriately-advanced versions of GDB. For more information,
   14552        please consult the more [17]detailed description.
   14553      * The default behavior for comparing typeinfo names has changed, so
   14554        in <typeinfo>, __GXX_MERGED_TYPEINFO_NAMES now defaults to zero.
   14555      * The new -static-libstdc++ option directs g++ to link the C++
   14556        library statically, even if the default would normally be to link
   14557        it dynamically.
   14558 
   14559   [18]Fortran
   14560 
   14561      * The COMMON default padding has been changed - instead of adding the
   14562        padding before a variable it is now added afterwards, which
   14563        increases the compatibility with other vendors and helps to obtain
   14564        the correct output in some cases. Cf. also the -falign-commons
   14565        option ([19]added in 4.4).
   14566      * The -finit-real= option now also supports the value snan for
   14567        signaling not-a-number; to be effective, one additionally needs to
   14568        enable trapping (e.g. via -ffpe-trap=). Note: Compile-time
   14569        optimizations can turn a signaling NaN into a quiet one.
   14570      * The new option -fcheck= has been added with the options bounds,
   14571        array-temps, do, pointer, and recursive. The bounds and array-temps
   14572        options are equivalent to -fbounds-check and
   14573        -fcheck-array-temporaries. The do option checks for invalid
   14574        modification of loop iteration variables, and the recursive option
   14575        tests for recursive calls to subroutines/functions which are not
   14576        marked as recursive. With pointer pointer association checks in
   14577        calls are performed; however, neither undefined pointers nor
   14578        pointers in expressions are handled. Using -fcheck=all enables all
   14579        these run-time checks.
   14580      * The run-time checking -fcheck=bounds now warns about invalid string
   14581        lengths of character dummy arguments. Additionally, more
   14582        compile-time checks have been added.
   14583      * The new option [20]-fno-protect-parens has been added; if set, the
   14584        compiler may reorder REAL and COMPLEX expressions without regard to
   14585        parentheses.
   14586      * GNU Fortran no longer links against libgfortranbegin. As before,
   14587        MAIN__ (assembler symbol name) is the actual Fortran main program,
   14588        which is invoked by the main function. However, main is now
   14589        generated and put in the same object file as MAIN__. For the time
   14590        being, libgfortranbegin still exists for backward compatibility.
   14591        For details see the new [21]Mixed-Language Programming chapter in
   14592        the manual.
   14593      * The I/O library was restructured for performance and cleaner code.
   14594      * Array assignments and WHERE are now run in parallel when OpenMP's
   14595        WORKSHARE is used.
   14596      * The experimental option -fwhole-file was added. The option allows
   14597        whole-file checking of procedure arguments and allows for better
   14598        optimizations. It can also be used with -fwhole-program, which is
   14599        now also supported in gfortran.
   14600      * More Fortran 2003 and Fortran 2008 mathematical functions can now
   14601        be used as initialization expressions.
   14602      * Some extended attributes such as STDCALL are now supported via the
   14603        [22]GCC$ compiler directive.
   14604      * For Fortran 77 compatibility: If -fno-sign-zero is used, the SIGN
   14605        intrinsic behaves now as if zero were always positive.
   14606      * For legacy compatibiliy: On Cygwin and MinGW, the special files
   14607        CONOUT$ and CONIN$ (and CONERR$ which maps to CONOUT$) are now
   14608        supported.
   14609      * Fortran 2003 support has been extended:
   14610           + Procedure-pointer function results and procedure-pointer
   14611             components (including PASS),
   14612           + allocatable scalars (experimental),
   14613           + DEFERRED type-bound procedures,
   14614           + the ERRMSG= argument of the ALLOCATE and DEALLOCATE statements
   14615             have been implemented.
   14616           + The ALLOCATE statement supports type-specs and the SOURCE=
   14617             argument.
   14618           + OPERATOR(*) and ASSIGNMENT(=) are now allowed as GENERIC
   14619             type-bound procedure (i.e. as type-bound operators).
   14620           + Rounding (ROUND=, RZ, ...) for output is now supported.
   14621           + The INT_FAST{8,16,32,64,128}_T kind type parameters of the
   14622             intrinsic module ISO_C_BINDING are now supported, except for
   14623             the targets listed above as ones where GCC does not have
   14624             <stdint.h> type information.
   14625           + Extensible derived types with type-bound procedure or
   14626             procedure pointer with PASS attribute now have to use CLASS in
   14627             line with the Fortran 2003 standard; the workaround to use
   14628             TYPE is no longer supported.
   14629           + [23]Experimental, incomplete support for polymorphism,
   14630             including CLASS, SELECT TYPE and dynamic dispatch of
   14631             type-bound procedure calls. Some features do not work yet such
   14632             as unlimited polymorphism (CLASS(*)).
   14633      * Fortran 2008 support has been extended:
   14634           + The OPEN statement now supports the NEWUNIT= option, which
   14635             returns a unique file unit, thus preventing inadvertent use of
   14636             the same unit in different parts of the program.
   14637           + Support for unlimited format items has been added.
   14638           + The INT{8,16,32} and REAL{32,64,128} kind type parameters of
   14639             the intrinsic module ISO_FORTRAN_ENV are now supported.
   14640           + Using complex arguments with TAN, SINH, COSH, TANH, ASIN,
   14641             ACOS, and ATAN is now possible; the functions ASINH, ACOSH,
   14642             and ATANH have been added (for real and complex arguments) and
   14643             ATAN(Y,X) is now an alias for ATAN2(Y,X).
   14644           + The BLOCK construct has been implemented.
   14645 
   14646 [24]New Targets and Target Specific Improvements
   14647 
   14648   AIX
   14649 
   14650      * Full cross-toolchain support now available with GNU Binutils
   14651 
   14652   ARM
   14653 
   14654      * GCC now supports the Cortex-M0 and Cortex-A5 processors.
   14655      * GCC now supports the ARM v7E-M architecture.
   14656      * GCC now supports VFPv4-based FPUs and FPUs with
   14657        single-precision-only VFP.
   14658      * GCC has many improvements to optimization for other ARM processors,
   14659        including scheduling support for the integer pipeline on Cortex-A9.
   14660      * GCC now supports the IEEE 754-2008 half-precision floating-point
   14661        type, and a variant ARM-specific half-precision type. This type is
   14662        specified using __fp16, with the layout determined by
   14663        -mfp16-format. With appropriate -mfpu options, the Cortex-A9 and
   14664        VFPv4 half-precision instructions will be used.
   14665      * GCC now supports the variant of AAPCS that uses VFP registers for
   14666        parameter passing and return values.
   14667 
   14668   AVR
   14669 
   14670      * The -mno-tablejump option has been removed because it has the same
   14671        effect as the -fno-jump-tables option.
   14672      * Added support for these new AVR devices:
   14673           + ATmega8U2
   14674           + ATmega16U2
   14675           + ATmega32U2
   14676 
   14677   [25]IA-32/x86-64
   14678 
   14679      * GCC now will set the default for -march= based on the configure
   14680        target.
   14681      * GCC now supports handling floating-point excess precision arising
   14682        from use of the x87 floating-point unit in a way that conforms to
   14683        ISO C99. This is enabled with -fexcess-precision=standard and with
   14684        standards conformance options such as -std=c99, and may be disabled
   14685        using -fexcess-precision=fast.
   14686      * Support for the Intel Atom processor is now available through the
   14687        -march=atom and -mtune=atom options.
   14688      * A new -mcrc32 option is now available to enable crc32 intrinsics.
   14689      * A new -mmovbe option is now available to enable GCC to use the
   14690        movbe instruction to implement __builtin_bswap32 and
   14691        __builtin_bswap64.
   14692      * SSE math now can be enabled by default at configure time with the
   14693        new --with-fpmath=sse option.
   14694      * There is a new intrinsic header file, <x86intrin.h>. It should be
   14695        included before using any IA-32/x86-64 intrinsics.
   14696      * Support for the XOP, FMA4, and LWP instruction sets for the AMD
   14697        Orochi processors are now available with the -mxop, -mfma4, and
   14698        -mlwp options.
   14699      * The -mabm option enables GCC to use the popcnt and lzcnt
   14700        instructions on AMD processors.
   14701      * The -mpopcnt option enables GCC to use the popcnt instructions on
   14702        both AMD and Intel processors.
   14703 
   14704   M68K/ColdFire
   14705 
   14706      * GCC now supports ColdFire 51xx, 5221x, 5225x, 52274, 52277, 5301x
   14707        and 5441x devices.
   14708      * GCC now supports thread-local storage (TLS) on M68K and ColdFire
   14709        processors.
   14710 
   14711   [26]MeP
   14712 
   14713    Support has been added for the Toshiba Media embedded Processor (MeP,
   14714    or mep-elf) embedded target.
   14715 
   14716   MIPS
   14717 
   14718      * GCC now supports MIPS 1004K processors.
   14719      * GCC can now be configured with options --with-arch-32,
   14720        --with-arch-64, --with-tune-32 and --with-tune-64 to control the
   14721        default optimization separately for 32-bit and 64-bit modes.
   14722      * MIPS targets now support an alternative _mcount interface, in which
   14723        register $12 points to the function's save slot for register $31.
   14724        This interface is selected by the -mcount-ra-address option; see
   14725        the documentation for more details.
   14726      * GNU/Linux targets can now generate read-only .eh_frame sections.
   14727        This optimization requires GNU binutils 2.20 or above, and is only
   14728        available if GCC is configured with a suitable version of binutils.
   14729      * GNU/Linux targets can now attach special relocations to indirect
   14730        calls, so that the linker can turn them into direct jumps or
   14731        branches. This optimization requires GNU binutils 2.20 or later,
   14732        and is automatically selected if GCC is configured with an
   14733        appropriate version of binutils. It can be explicitly enabled or
   14734        disabled using the -mrelax-pic-calls command-line option.
   14735      * GCC now generates more heavily-optimized atomic operations on
   14736        Octeon processors.
   14737      * MIPS targets now support the -fstack-protector option.
   14738      * GCC now supports an -msynci option, which specifies that synci is
   14739        enough to flush the instruction cache, without help from the
   14740        operating system. GCC uses this information to optimize
   14741        automatically-generated cache flush operations, such as those used
   14742        for nested functions in C. There is also a --with-synci
   14743        configure-time option, which makes -msynci the default.
   14744      * GCC supports four new function attributes for interrupt handlers:
   14745        interrupt, use_shadow_register_set, keep_interrupts_masked and
   14746        use_debug_exception_return. See the documentation for more details
   14747        about these attributes.
   14748 
   14749   [27]RS/6000 (POWER/PowerPC)
   14750 
   14751      * GCC now supports the Power ISA 2.06, which includes the VSX
   14752        instructions that add vector 64-bit floating point support, new
   14753        population count instructions, and conversions between floating
   14754        point and unsigned types.
   14755      * Support for the power7 processor is now available through the
   14756        -mcpu=power7 and -mtune=power7.
   14757      * GCC will now vectorize loops that contain simple math functions
   14758        like copysign when generating code for altivec or VSX targets.
   14759      * Support for the A2 processor is now available through the -mcpu=a2
   14760        and -mtune=a2 options.
   14761      * Support for the 476 processor is now available through the
   14762        -mcpu={476,476fp} and -mtune={476,476fp} options.
   14763      * Support for the e500mc64 processor is now available through the
   14764        -mcpu=e500mc64 and -mtune=e500mc64 options.
   14765      * GCC can now be configured with options --with-cpu-32,
   14766        --with-cpu-64, --with-tune-32 and --with-tune-64 to control the
   14767        default optimization separately for 32-bit and 64-bit modes.
   14768      * Starting with GCC 4.5.4, vectors of type vector long long or vector
   14769        long are passed and returned in the same method as other vectors
   14770        with the VSX instruction set. Previously the GCC compiler did not
   14771        adhere to the ABI for 128-bit vectors with 64-bit integer base
   14772        types (PR 48857). This is also fixed in the GCC 4.6.1 release.
   14773 
   14774   [28]RX
   14775 
   14776    Support has been added for the Renesas RX Processor (rx-elf) target.
   14777 
   14778 [29]Operating Systems
   14779 
   14780   [30]Windows (Cygwin and MinGW)
   14781 
   14782      * GCC now installs all the major language runtime libraries as DLLs
   14783        when configured with the --enable-shared option.
   14784      * GCC now makes use of the new support for aligned common variables
   14785        in versions of binutils >= 2.20 to fix bugs in the support for SSE
   14786        data types.
   14787      * Improvements to the libffi support library increase the reliability
   14788        of code generated by GCJ on all Windows platforms. Libgcj is
   14789        enabled by default for the first time.
   14790      * Libtool improvements simplify installation by placing the generated
   14791        DLLs in the correct binaries directory.
   14792      * Numerous other minor bugfixes and improvements, and substantial
   14793        enhancements to the Fortran language support library.
   14794 
   14795    >
   14796 
   14797 Other significant improvements
   14798 
   14799   Plugins
   14800 
   14801      * It is now possible to extend the compiler without having to modify
   14802        its source code. A new option -fplugin=file.so tells GCC to load
   14803        the shared object file.so and execute it as part of the compiler.
   14804        The internal documentation describes the details on how plugins can
   14805        interact with the compiler.
   14806 
   14807   Installation changes
   14808 
   14809      * The move to newer autotools changed default installation
   14810        directories and switches to control them: The --with-datarootdir,
   14811        --with-docdir, --with-pdfdir, and --with-htmldir switches are not
   14812        used any more. Instead, you can now use --datarootdir, --docdir,
   14813        --htmldir, and --pdfdir. The default installation directories have
   14814        changed as follows according to the GNU Coding Standards:
   14815 
   14816        datarootdir read-only architecture-independent data root [PREFIX/share]
   14817        localedir   locale-specific message catalogs [DATAROOTDIR/locale]
   14818        docdir      documentation root [DATAROOTDIR/doc/PACKAGE]
   14819        htmldir     html documentation [DOCDIR]
   14820        dvidir      dvi documentation [DOCDIR]
   14821        pdfdir      pdf documentation [DOCDIR]
   14822        psdir       ps documentation [DOCDIR]
   14823        The following variables have new default values:
   14824 
   14825        datadir read-only architecture-independent data [DATAROOTDIR]
   14826        infodir info documentation [DATAROOTDIR/info]
   14827        mandir  man documentation [DATAROOTDIR/man]
   14828 
   14829 [31]GCC 4.5.1
   14830 
   14831    This is the [32]list of problem reports (PRs) from GCC's bug tracking
   14832    system that are known to be fixed in the 4.5.1 release. This list might
   14833    not be complete (that is, it is possible that some PRs that have been
   14834    fixed are not listed here).
   14835 
   14836   All languages
   14837 
   14838      * GCC's new link-time optimizer ([33]-flto) now also works on a few
   14839        non-ELF targets:
   14840           + Cygwin (*-cygwin*)
   14841           + MinGW (*-mingw*)
   14842           + Darwin on x86-64 (x86_64-apple-darwin*)
   14843        LTO is not enabled by default for these targets. To enable LTO, you
   14844        should configure with the --enable-lto option.
   14845 
   14846 [34]GCC 4.5.2
   14847 
   14848    This is the [35]list of problem reports (PRs) from GCC's bug tracking
   14849    system that are known to be fixed in the 4.5.2 release. This list might
   14850    not be complete (that is, it is possible that some PRs that have been
   14851    fixed are not listed here).
   14852 
   14853 [36]GCC 4.5.3
   14854 
   14855    This is the [37]list of problem reports (PRs) from GCC's bug tracking
   14856    system that are known to be fixed in the 4.5.3 release. This list might
   14857    not be complete (that is, it is possible that some PRs that have been
   14858    fixed are not listed here).
   14859 
   14860    On the PowerPC compiler, the Altivec builtin functions vec_ld and
   14861    vec_st have been modified to generate the Altivec memory instructions
   14862    LVX and STVX, even if the -mvsx option is used. In the initial GCC 4.5
   14863    release, these builtin functions were changed to generate VSX memory
   14864    reference instructions instead of Altivec memory instructions, but
   14865    there are differences between the two instructions. If the VSX
   14866    instruction set is available, you can now use the new builtin functions
   14867    vec_vsx_ld and vec_vsx_st which always generates the VSX memory
   14868    instructions.
   14869 
   14870 [38]GCC 4.5.4
   14871 
   14872    This is the [39]list of problem reports (PRs) from GCC's bug tracking
   14873    system that are known to be fixed in the 4.5.4 release. This list might
   14874    not be complete (that is, it is possible that some PRs that have been
   14875    fixed are not listed here).
   14876 
   14877 
   14878     For questions related to the use of GCC, please consult these web
   14879     pages and the [40]GCC manuals. If that fails, the
   14880     [41]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   14881     web pages and the development of GCC are welcome on our developer
   14882     list at [42]gcc (a] gcc.gnu.org. All of [43]our lists have public
   14883     archives.
   14884 
   14885    Copyright (C) [44]Free Software Foundation, Inc. Verbatim copying and
   14886    distribution of this entire article is permitted in any medium,
   14887    provided this notice is preserved.
   14888 
   14889    These pages are [45]maintained by the GCC team. Last modified
   14890    2025-01-31.
   14891 
   14892 References
   14893 
   14894    1. https://www.multiprecision.org/
   14895    2. https://gcc.gnu.org/install/prerequisites.html
   14896    3. https://gcc.gnu.org/ml/gcc/2010-01/msg00510.html
   14897    4. https://gcc.gnu.org/gcc-4.4/changes.html#obsoleted
   14898    5. https://gcc.gnu.org/gcc-4.5/changes.html#x86
   14899    6. https://gcc.gnu.org/PR30789
   14900    7. https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-flto-801
   14901    8. https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-fwhopr-802
   14902    9. https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-fwhole-program-800
   14903   10. https://gcc.gnu.org/onlinedocs/gcc/Restricted-Pointers.html
   14904   11. https://gcc.gnu.org/gcc-4.5/changes.html#cplusplus
   14905   12. https://gcc.gnu.org/gcc-4.5/cxx0x_status.html
   14906   13. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#757
   14907   14. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#176
   14908   15. https://gcc.gnu.org/onlinedocs/libstdc++/manual/profile_mode.html
   14909   16. https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.tr24733
   14910   17. https://sourceware.org/gdb/wiki/STLSupport
   14911   18. https://gcc.gnu.org/gcc-4.5/changes.html#Fortran
   14912   19. https://gcc.gnu.org/gcc-4.4/changes.html
   14913   20. https://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html
   14914   21. https://gcc.gnu.org/onlinedocs/gfortran/Mixed-Language-Programming.html
   14915   22. https://gcc.gnu.org/onlinedocs/gfortran/GNU-Fortran-Compiler-Directives.html
   14916   23. https://gcc.gnu.org/wiki/OOP
   14917   24. https://gcc.gnu.org/gcc-4.5/changes.html#targets
   14918   25. https://gcc.gnu.org/gcc-4.5/changes.html#x86
   14919   26. https://gcc.gnu.org/gcc-4.5/changes.html#mep
   14920   27. https://gcc.gnu.org/gcc-4.5/changes.html#rs6000
   14921   28. https://gcc.gnu.org/gcc-4.5/changes.html#rx
   14922   29. https://gcc.gnu.org/gcc-4.5/changes.html#os
   14923   30. https://gcc.gnu.org/gcc-4.5/changes.html#windows
   14924   31. https://gcc.gnu.org/gcc-4.5/changes.html#GCC4.5.1
   14925   32. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.5.1
   14926   33. https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-flto-801
   14927   34. https://gcc.gnu.org/gcc-4.5/changes.html#GCC4.5.2
   14928   35. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.5.2
   14929   36. https://gcc.gnu.org/gcc-4.5/changes.html#GCC4.5.3
   14930   37. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.5.3
   14931   38. https://gcc.gnu.org/gcc-4.5/changes.html#GCC4.5.4
   14932   39. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.5.4
   14933   40. https://gcc.gnu.org/onlinedocs/
   14934   41. mailto:gcc-help (a] gcc.gnu.org
   14935   42. mailto:gcc (a] gcc.gnu.org
   14936   43. https://gcc.gnu.org/lists.html
   14937   44. https://www.fsf.org/
   14938   45. https://gcc.gnu.org/about.html
   14939 ======================================================================
   14940 http://gcc.gnu.org/gcc-4.4/index.html
   14941 
   14942                              GCC 4.4 Release Series
   14943 
   14944    This release series is no longer maintained.
   14945 
   14946    March 13, 2012
   14947 
   14948    The [1]GNU project and the GCC developers are pleased to announce the
   14949    release of GCC 4.4.7.
   14950 
   14951    This release is a bug-fix release, containing fixes for regressions in
   14952    GCC 4.4.6 relative to previous releases of GCC.
   14953 
   14954 Release History
   14955 
   14956    GCC 4.4.7
   14957           March 13, 2012 ([2]changes)
   14958 
   14959    GCC 4.4.6
   14960           April 16, 2011 ([3]changes)
   14961 
   14962    GCC 4.4.5
   14963           October 1, 2010 ([4]changes)
   14964 
   14965    GCC 4.4.4
   14966           April 29, 2010 ([5]changes)
   14967 
   14968    GCC 4.4.3
   14969           January 21, 2010 ([6]changes)
   14970 
   14971    GCC 4.4.2
   14972           October 15, 2009 ([7]changes)
   14973 
   14974    GCC 4.4.1
   14975           July 22, 2009 ([8]changes)
   14976 
   14977    GCC 4.4.0
   14978           April 21, 2009 ([9]changes)
   14979 
   14980 References and Acknowledgements
   14981 
   14982    GCC used to stand for the GNU C Compiler, but since the compiler
   14983    supports several other languages aside from C, it now stands for the
   14984    GNU Compiler Collection.
   14985 
   14986    A list of [10]successful builds is updated as new information becomes
   14987    available.
   14988 
   14989    The GCC developers would like to thank the numerous people that have
   14990    contributed new features, improvements, bug fixes, and other changes as
   14991    well as test results to GCC. This [11]amazing group of volunteers is
   14992    what makes GCC successful.
   14993 
   14994    For additional information about GCC please refer to the [12]GCC
   14995    project web site or contact the [13]GCC development mailing list.
   14996 
   14997    To obtain GCC please use [14]our mirror sites or [15]our version
   14998    control system.
   14999 
   15000 
   15001     For questions related to the use of GCC, please consult these web
   15002     pages and the [16]GCC manuals. If that fails, the
   15003     [17]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   15004     web pages and the development of GCC are welcome on our developer
   15005     list at [18]gcc (a] gcc.gnu.org. All of [19]our lists have public
   15006     archives.
   15007 
   15008    Copyright (C) [20]Free Software Foundation, Inc. Verbatim copying and
   15009    distribution of this entire article is permitted in any medium,
   15010    provided this notice is preserved.
   15011 
   15012    These pages are [21]maintained by the GCC team. Last modified
   15013    2022-10-26.
   15014 
   15015 References
   15016 
   15017    1. http://www.gnu.org/
   15018    2. https://gcc.gnu.org/gcc-4.4/changes.html
   15019    3. https://gcc.gnu.org/gcc-4.4/changes.html
   15020    4. https://gcc.gnu.org/gcc-4.4/changes.html
   15021    5. https://gcc.gnu.org/gcc-4.4/changes.html
   15022    6. https://gcc.gnu.org/gcc-4.4/changes.html
   15023    7. https://gcc.gnu.org/gcc-4.4/changes.html
   15024    8. https://gcc.gnu.org/gcc-4.4/changes.html
   15025    9. https://gcc.gnu.org/gcc-4.4/changes.html
   15026   10. https://gcc.gnu.org/gcc-4.4/buildstat.html
   15027   11. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   15028   12. https://gcc.gnu.org/index.html
   15029   13. mailto:gcc (a] gcc.gnu.org
   15030   14. https://gcc.gnu.org/mirrors.html
   15031   15. https://gcc.gnu.org/git.html
   15032   16. https://gcc.gnu.org/onlinedocs/
   15033   17. mailto:gcc-help (a] gcc.gnu.org
   15034   18. mailto:gcc (a] gcc.gnu.org
   15035   19. https://gcc.gnu.org/lists.html
   15036   20. https://www.fsf.org/
   15037   21. https://gcc.gnu.org/about.html
   15038 ======================================================================
   15039 http://gcc.gnu.org/gcc-4.4/changes.html
   15040 
   15041                              GCC 4.4 Release Series
   15042                         Changes, New Features, and Fixes
   15043 
   15044    The latest release in the 4.4 release series is [1]GCC 4.4.7.
   15045 
   15046 Caveats
   15047 
   15048      * __builtin_stdarg_start has been completely removed from GCC.
   15049        Support for <varargs.h> had been deprecated since GCC 4.0. Use
   15050        __builtin_va_start as a replacement.
   15051      * Some of the errors issued by the C++ front end that could be
   15052        downgraded to warnings in previous releases by using -fpermissive
   15053        are now warnings by default. They can be converted into errors by
   15054        using -pedantic-errors.
   15055      * Use of the cpp assertion extension will now emit a warning when
   15056        -Wdeprecated or -pedantic is used. This extension has been
   15057        deprecated for many years, but never warned about.
   15058      * Packed bit-fields of type char were not properly bit-packed on many
   15059        targets prior to GCC 4.4. On these targets, the fix in GCC 4.4
   15060        causes an ABI change. For example there is no longer a 4-bit
   15061        padding between field a and b in this structure:
   15062     struct foo
   15063     {
   15064       char a:4;
   15065       char b:8;
   15066     } __attribute__ ((packed));
   15067        There is a new warning to help identify fields that are affected:
   15068     foo.c:5: note: Offset of packed bit-field 'b' has changed in GCC 4.4
   15069        The warning can be disabled with -Wno-packed-bitfield-compat.
   15070      * On ARM EABI targets, the C++ mangling of the va_list type has been
   15071        changed to conform to the current revision of the EABI. This does
   15072        not affect the libstdc++ library included with GCC.
   15073      * The SCOUNT and POS bits of the MIPS DSP control register are now
   15074        treated as global. Previous versions of GCC treated these fields as
   15075        call-clobbered instead.
   15076      * The MIPS port no longer recognizes the h asm constraint. It was
   15077        necessary to remove this constraint in order to avoid generating
   15078        unpredictable code sequences.
   15079        One of the main uses of the h constraint was to extract the high
   15080        part of a multiplication on 64-bit targets. For example:
   15081     asm ("dmultu\t%1,%2" : "=h" (result) : "r" (x), "r" (y));
   15082        You can now achieve the same effect using 128-bit types:
   15083     typedef unsigned int uint128_t __attribute__((mode(TI)));
   15084     result = ((uint128_t) x * y) >> 64;
   15085        The second sequence is better in many ways. For example, if x and y
   15086        are constants, the compiler can perform the multiplication at
   15087        compile time. If x and y are not constants, the compiler can
   15088        schedule the runtime multiplication better than it can schedule an
   15089        asm statement.
   15090      * Support for a number of older systems and recently unmaintained or
   15091        untested target ports of GCC has been declared obsolete in GCC 4.4.
   15092        Unless there is activity to revive them, the next release of GCC
   15093        will have their sources permanently removed.
   15094        The following ports for individual systems on particular
   15095        architectures have been obsoleted:
   15096           + Generic a.out on IA32 and m68k (i[34567]86-*-aout*,
   15097             m68k-*-aout*)
   15098           + Generic COFF on ARM, H8300, IA32, m68k and SH (arm-*-coff*,
   15099             armel-*-coff*, h8300-*-*, i[34567]86-*-coff*, m68k-*-coff*,
   15100             sh-*-*). This does not affect other more specific targets
   15101             using the COFF object format on those architectures, or the
   15102             more specific H8300 and SH targets (h8300-*-rtems*,
   15103             h8300-*-elf*, sh-*-elf*, sh-*-symbianelf*, sh-*-linux*,
   15104             sh-*-netbsdelf*, sh-*-rtems*, sh-wrs-vxworks).
   15105           + 2BSD on PDP-11 (pdp11-*-bsd)
   15106           + AIX 4.1 and 4.2 on PowerPC (rs6000-ibm-aix4.[12]*,
   15107             powerpc-ibm-aix4.[12]*)
   15108           + Tuning support for Itanium1 (Merced) variants. Note that code
   15109             tuned for Itanium2 should also run correctly on Itanium1.
   15110      * The protoize and unprotoize utilities have been obsoleted and will
   15111        be removed in GCC 4.5. These utilities have not been installed by
   15112        default since GCC 3.0.
   15113      * Support has been removed for all the [2]configurations obsoleted in
   15114        GCC 4.3.
   15115      * Unknown -Wno-* options are now silently ignored by GCC if no other
   15116        diagnostics are issued. If other diagnostics are issued, then GCC
   15117        warns about the unknown options.
   15118      * More information on porting to GCC 4.4 from previous versions of
   15119        GCC can be found in the [3]porting guide for this release.
   15120 
   15121 General Optimizer Improvements
   15122 
   15123      * A new command-line switch -findirect-inlining has been added. When
   15124        turned on it allows the inliner to also inline indirect calls that
   15125        are discovered to have known targets at compile time thanks to
   15126        previous inlining.
   15127      * A new command-line switch -ftree-switch-conversion has been added.
   15128        This new pass turns simple initializations of scalar variables in
   15129        switch statements into initializations from a static array, given
   15130        that all the values are known at compile time and the ratio between
   15131        the new array size and the original switch branches does not exceed
   15132        the parameter --param switch-conversion-max-branch-ratio (default
   15133        is eight).
   15134      * A new command-line switch -ftree-builtin-call-dce has been added.
   15135        This optimization eliminates unnecessary calls to certain builtin
   15136        functions when the return value is not used, in cases where the
   15137        calls can not be eliminated entirely because the function may set
   15138        errno. This optimization is on by default at -O2 and above.
   15139      * A new command-line switch -fconserve-stack directs the compiler to
   15140        minimize stack usage even if it makes the generated code slower.
   15141        This affects inlining decisions.
   15142      * When the assembler supports it, the compiler will now emit unwind
   15143        information using assembler .cfi directives. This makes it possible
   15144        to use such directives in inline assembler code. The new option
   15145        -fno-dwarf2-cfi-asm directs the compiler to not use .cfi
   15146        directives.
   15147      * The [4]Graphite branch has been merged. This merge has brought in a
   15148        new framework for loop optimizations based on a polyhedral
   15149        intermediate representation. These optimizations apply to all the
   15150        languages supported by GCC. The following new code transformations
   15151        are available in GCC 4.4:
   15152           + -floop-interchange performs loop interchange transformations
   15153             on loops. Interchanging two nested loops switches the inner
   15154             and outer loops. For example, given a loop like:
   15155           DO J = 1, M
   15156             DO I = 1, N
   15157               A(J, I) = A(J, I) * C
   15158             ENDDO
   15159           ENDDO
   15160 
   15161             loop interchange will transform the loop as if the user had
   15162             written:
   15163           DO I = 1, N
   15164             DO J = 1, M
   15165               A(J, I) = A(J, I) * C
   15166             ENDDO
   15167           ENDDO
   15168 
   15169             which can be beneficial when N is larger than the caches,
   15170             because in Fortran, the elements of an array are stored in
   15171             memory contiguously by column, and the original loop iterates
   15172             over rows, potentially creating at each access a cache miss.
   15173           + -floop-strip-mine performs loop strip mining transformations
   15174             on loops. Strip mining splits a loop into two nested loops.
   15175             The outer loop has strides equal to the strip size and the
   15176             inner loop has strides of the original loop within a strip.
   15177             For example, given a loop like:
   15178           DO I = 1, N
   15179             A(I) = A(I) + C
   15180           ENDDO
   15181 
   15182             loop strip mining will transform the loop as if the user had
   15183             written:
   15184           DO II = 1, N, 4
   15185             DO I = II, min (II + 3, N)
   15186               A(I) = A(I) + C
   15187             ENDDO
   15188           ENDDO
   15189 
   15190           + -floop-block performs loop blocking transformations on loops.
   15191             Blocking strip mines each loop in the loop nest such that the
   15192             memory accesses of the element loops fit inside caches. For
   15193             example, given a loop like:
   15194           DO I = 1, N
   15195             DO J = 1, M
   15196               A(J, I) = B(I) + C(J)
   15197             ENDDO
   15198           ENDDO
   15199 
   15200             loop blocking will transform the loop as if the user had
   15201             written:
   15202           DO II = 1, N, 64
   15203             DO JJ = 1, M, 64
   15204               DO I = II, min (II + 63, N)
   15205                 DO J = JJ, min (JJ + 63, M)
   15206                   A(J, I) = B(I) + C(J)
   15207                 ENDDO
   15208               ENDDO
   15209             ENDDO
   15210           ENDDO
   15211 
   15212             which can be beneficial when M is larger than the caches,
   15213             because the innermost loop will iterate over a smaller amount
   15214             of data that can be kept in the caches.
   15215      * A new register allocator has replaced the old one. It is called
   15216        integrated register allocator (IRA) because coalescing, register
   15217        live range splitting, and hard register preferencing are done
   15218        on-the-fly during coloring. It also has better integration with the
   15219        reload pass. IRA is a regional register allocator which uses modern
   15220        Chaitin-Briggs coloring instead of Chow's priority coloring used in
   15221        the old register allocator. More info about IRA internals and
   15222        options can be found in the GCC manuals.
   15223      * A new instruction scheduler and software pipeliner, based on the
   15224        selective scheduling approach, has been added. The new pass
   15225        performs instruction unification, register renaming, substitution
   15226        through register copies, and speculation during scheduling. The
   15227        software pipeliner is able to pipeline non-countable loops. The new
   15228        pass is targeted at scheduling-eager in-order platforms. In GCC 4.4
   15229        it is available for the Intel Itanium platform working by default
   15230        as the second scheduling pass (after register allocation) at the
   15231        -O3 optimization level.
   15232      * When using -fprofile-generate with a multi-threaded program, the
   15233        profile counts may be slightly wrong due to race conditions. The
   15234        new -fprofile-correction option directs the compiler to apply
   15235        heuristics to smooth out the inconsistencies. By default the
   15236        compiler will give an error message when it finds an inconsistent
   15237        profile.
   15238      * The new -fprofile-dir=PATH option permits setting the directory
   15239        where profile data files are stored when using -fprofile-generate
   15240        and friends, and the directory used when reading profile data files
   15241        using -fprofile-use and friends.
   15242 
   15243 New warning options
   15244 
   15245      * The new -Wframe-larger-than=NUMBER option directs GCC to emit a
   15246        warning if any stack frame is larger than NUMBER bytes. This may be
   15247        used to help ensure that code fits within a limited amount of stack
   15248        space.
   15249      * The command-line option -Wlarger-than-N is now written as
   15250        -Wlarger-than=N and the old form is deprecated.
   15251      * The new -Wno-mudflap option disables warnings about constructs
   15252        which can not be instrumented when using -fmudflap.
   15253 
   15254 New Languages and Language specific improvements
   15255 
   15256      * Version 3.0 of the OpenMP specification is now supported for the C,
   15257        C++, and Fortran compilers.
   15258      * New character data types, per [5]TR 19769: New character types in
   15259        C, are now supported for the C compiler in -std=gnu99 mode, as
   15260        __CHAR16_TYPE__ and __CHAR32_TYPE__, and for the C++ compiler in
   15261        -std=c++0x and -std=gnu++0x modes, as char16_t and char32_t too.
   15262 
   15263   C family
   15264 
   15265      * A new optimize attribute was added to allow programmers to change
   15266        the optimization level and particular optimization options for an
   15267        individual function. You can also change the optimization options
   15268        via the GCC optimize pragma for functions defined after the pragma.
   15269        The GCC push_options pragma and the GCC pop_options pragma allow
   15270        you temporarily save and restore the options used. The GCC
   15271        reset_options pragma restores the options to what was specified on
   15272        the command line.
   15273      * Uninitialized warnings do not require enabling optimization
   15274        anymore, that is, -Wuninitialized can be used together with -O0.
   15275        Nonetheless, the warnings given by -Wuninitialized will probably be
   15276        more accurate if optimization is enabled.
   15277      * -Wparentheses now warns about expressions such as (!x | y) and (!x
   15278        & y). Using explicit parentheses, such as in ((!x) | y), silences
   15279        this warning.
   15280      * -Wsequence-point now warns within if, while,do while and for
   15281        conditions, and within for begin/end expressions.
   15282      * A new option -dU is available to dump definitions of preprocessor
   15283        macros that are tested or expanded.
   15284 
   15285   C++
   15286 
   15287      * [6]Improved experimental support for the upcoming ISO C++ standard,
   15288        C++0x. Including support for auto, inline namespaces, generalized
   15289        initializer lists, defaulted and deleted functions, new character
   15290        types, and scoped enums.
   15291      * Those errors that may be downgraded to warnings to build legacy
   15292        code now mention -fpermissive when -fdiagnostics-show-option is
   15293        enabled.
   15294      * -Wconversion now warns if the result of a static_cast to enumeral
   15295        type is unspecified because the value is outside the range of the
   15296        enumeral type.
   15297      * -Wuninitialized now warns if a non-static reference or non-static
   15298        const member appears in a class without constructors.
   15299      * G++ now properly implements value-initialization, so objects with
   15300        an initializer of () and an implicitly defined default constructor
   15301        will be zero-initialized before the default constructor is called.
   15302 
   15303     Runtime Library (libstdc++)
   15304 
   15305      * Improved experimental support for the upcoming ISO C++ standard,
   15306        C++0x, including:
   15307           + Support for <chrono>, <condition_variable>, <cstdatomic>,
   15308             <forward_list>, <initializer_list>, <mutex>, <ratio>,
   15309             <system_error>, and <thread>.
   15310           + unique_ptr, <algorithm> additions, exception propagation, and
   15311             support for the new character types in <string> and <limits>.
   15312           + Existing facilities now exploit initializer lists, defaulted
   15313             and deleted functions, and the newly implemented core C++0x
   15314             features.
   15315           + Some standard containers are more efficient together with
   15316             stateful allocators, i.e., no allocator is constructed on the
   15317             fly at element construction time.
   15318      * Experimental support for non-standard pointer types in containers.
   15319      * The long standing libstdc++/30928 has been fixed for targets
   15320        running glibc 2.10 or later.
   15321      * As usual, many small and larger bug fixes, in particular quite a
   15322        few corner cases in <locale>.
   15323 
   15324   Fortran
   15325 
   15326      * GNU Fortran now employs libcpp directly instead of using cc1 as an
   15327        external preprocessor. The [7]-cpp option was added to allow manual
   15328        invocation of the preprocessor without relying on filename
   15329        extensions.
   15330      * The [8]-Warray-temporaries option warns about array temporaries
   15331        generated by the compiler, as an aid to optimization.
   15332      * The [9]-fcheck-array-temporaries option has been added, printing a
   15333        notification at run time, when an array temporary had to be created
   15334        for an function argument. Contrary to -Warray-temporaries the
   15335        warning is only printed if the array is noncontiguous.
   15336      * Improved generation of DWARF debugging symbols
   15337      * If using an intrinsic not part of the selected standard (via -std=
   15338        and -fall-intrinsics) gfortran will now treat it as if this
   15339        procedure were declared EXTERNAL and try to link to a user-supplied
   15340        procedure. -Wintrinsics-std will warn whenever this happens. The
   15341        now-useless option -Wnonstd-intrinsic was removed.
   15342      * The flag -falign-commons has been added to control the alignment of
   15343        variables in COMMON blocks, which is enabled by default in line
   15344        with previous GCC version. Using -fno-align-commons one can force
   15345        commons to be contiguous in memory as required by the Fortran
   15346        standard, however, this slows down the memory access. The option
   15347        -Walign-commons, which is enabled by default, warns when padding
   15348        bytes were added for alignment. The proper solution is to sort the
   15349        common objects by decreasing storage size, which avoids the
   15350        alignment problems.
   15351      * Fortran 2003 support has been extended:
   15352           + Wide characters (ISO 10646, UCS-4, kind=4) and UTF-8 I/O is
   15353             now supported (except internal reads from/writes to wide
   15354             strings). [10]-fbackslash now supports also \unnnn and
   15355             \Unnnnnnnn to enter Unicode characters.
   15356           + Asynchronous I/O (implemented as synchronous I/O) and the
   15357             decimal=, size=, sign=, pad=, blank=, and delim= specifiers
   15358             are now supported in I/O statements.
   15359           + Support for Fortran 2003 structure constructors and for array
   15360             constructor with typespec has been added.
   15361           + Procedure Pointers (but not yet as component in derived types
   15362             and as function results) are now supported.
   15363           + Abstract types, type extension, and type-bound procedures
   15364             (both PROCEDURE and GENERIC but not as operators). Note: As
   15365             CLASS/polymorphyic types are not implemented, type-bound
   15366             procedures with PASS accept as non-standard extension TYPE
   15367             arguments.
   15368      * Fortran 2008 support has been added:
   15369           + The -std=f2008 option and support for the file extensions
   15370             .f2008 and .F2008 has been added.
   15371           + The g0 format descriptor is now supported.
   15372           + The Fortran 2008 mathematical intrinsics ASINH, ACOSH, ATANH,
   15373             ERF, ERFC, GAMMA, LOG_GAMMA, BESSEL_*, HYPOT, and ERFC_SCALED
   15374             are now available (some of them existed as GNU extension
   15375             before). Note: The hyperbolic functions are not yet supporting
   15376             complex arguments and the three- argument version of BESSEL_*N
   15377             is not available.
   15378           + The bit intrinsics LEADZ and TRAILZ have been added.
   15379 
   15380   Java (GCJ)
   15381 
   15382   Ada
   15383 
   15384      * The Ada runtime now supports multilibs on many platforms including
   15385        x86_64, SPARC and PowerPC. Their build is enabled by default.
   15386 
   15387 [11]New Targets and Target Specific Improvements
   15388 
   15389   ARM
   15390 
   15391      * GCC now supports optimizing for the Cortex-A9, Cortex-R4 and
   15392        Cortex-R4F processors and has many other improvements to
   15393        optimization for ARM processors.
   15394      * GCC now supports the VFPv3 variant with 16 double-precision
   15395        registers with -mfpu=vfpv3-d16. The option -mfpu=vfp3 has been
   15396        renamed to -mfpu=vfpv3.
   15397      * GCC now supports the -mfix-cortex-m3-ldrd option to work around an
   15398        erratum on Cortex-M3 processors.
   15399      * GCC now supports the __sync_* atomic operations for ARM EABI
   15400        GNU/Linux.
   15401      * The section anchors optimization is now enabled by default when
   15402        optimizing for ARM.
   15403      * GCC now uses a new EABI-compatible profiling interface for EABI
   15404        targets. This requires a function __gnu_mcount_nc, which is
   15405        provided by GNU libc versions 2.8 and later.
   15406 
   15407   AVR
   15408 
   15409      * The -mno-tablejump option has been deprecated because it has the
   15410        same effect as the -fno-jump-tables option.
   15411      * Added support for these new AVR devices:
   15412           + ATA6289
   15413           + ATtiny13A
   15414           + ATtiny87
   15415           + ATtiny167
   15416           + ATtiny327
   15417           + ATmega8C1
   15418           + ATmega16C1
   15419           + ATmega32C1
   15420           + ATmega8M1
   15421           + ATmega16M1
   15422           + ATmega32M1
   15423           + ATmega32U4
   15424           + ATmega16HVB
   15425           + ATmega4HVD
   15426           + ATmega8HVD
   15427           + ATmega64C1
   15428           + ATmega64M1
   15429           + ATmega16U4
   15430           + ATmega32U6
   15431           + ATmega128RFA1
   15432           + AT90PWM81
   15433           + AT90SCR100
   15434           + M3000F
   15435           + M3000S
   15436           + M3001B
   15437 
   15438   IA-32/x86-64
   15439 
   15440      * Support for Intel AES built-in functions and code generation is
   15441        available via -maes.
   15442      * Support for Intel PCLMUL built-in function and code generation is
   15443        available via -mpclmul.
   15444      * Support for Intel AVX built-in functions and code generation is
   15445        available via -mavx.
   15446      * Automatically align the stack for local variables with alignment
   15447        requirement.
   15448      * GCC can now utilize the SVML library for vectorizing calls to a set
   15449        of C99 functions if -mveclibabi=svml is specified and you link to
   15450        an SVML ABI compatible library.
   15451      * On x86-64, the ABI has been changed in the following cases to
   15452        conform to the x86-64 ABI:
   15453           + Passing/returning structures with flexible array member:
   15454   struct foo
   15455     {
   15456       int i;
   15457       int flex[];
   15458     };
   15459           + Passing/returning structures with complex float member:
   15460   struct foo
   15461     {
   15462       int i;
   15463       __complex__ float f;
   15464     };
   15465           + Passing/returning unions with long double member:
   15466   union foo
   15467     {
   15468       int x;
   15469       long double ld;
   15470     };
   15471        Code built with previous versions of GCC that uses any of these is
   15472        not compatible with code built with GCC 4.4.0 or later.
   15473      * A new target attribute was added to allow programmers to change the
   15474        target options like -msse2 or -march=k8 for an individual function.
   15475        You can also change the target options via the GCC target pragma
   15476        for functions defined after the pragma.
   15477      * GCC can now be configured with options --with-arch-32,
   15478        --with-arch-64, --with-cpu-32, --with-cpu-64, --with-tune-32 and
   15479        --with-tune-64 to control the default optimization separately for
   15480        32-bit and 64-bit modes.
   15481 
   15482   IA-32/IA64
   15483 
   15484      * Support for __float128 (TFmode) IEEE quad type and corresponding
   15485        TCmode IEEE complex quad type is available via the soft-fp library
   15486        on IA-32/IA64 targets. This includes basic arithmetic operations
   15487        (addition, subtraction, negation, multiplication and division) on
   15488        __float128 real and TCmode complex values, the full set of IEEE
   15489        comparisons between __float128 values, conversions to and from
   15490        float, double and long double floating point types, as well as
   15491        conversions to and from signed or unsigned integer, signed or
   15492        unsigned long integer and signed or unsigned quad (TImode, IA64
   15493        only) integer types. Additionally, all operations generate the full
   15494        set of IEEE exceptions and support the full set of IEEE rounding
   15495        modes.
   15496 
   15497   M68K/ColdFire
   15498 
   15499      * GCC now supports instruction scheduling for ColdFire V1, V3 and V4
   15500        processors. (Scheduling support for ColdFire V2 processors was
   15501        added in GCC 4.3.)
   15502      * GCC now supports the -mxgot option to support programs requiring
   15503        many GOT entries on ColdFire.
   15504      * The m68k-*-linux-gnu target now builds multilibs by default.
   15505 
   15506   MIPS
   15507 
   15508      * MIPS Technologies have extended the original MIPS SVR4 ABI to
   15509        include support for procedure linkage tables (PLTs) and copy
   15510        relocations. These extensions allow GNU/Linux executables to use a
   15511        significantly more efficient code model than the one defined by the
   15512        original ABI.
   15513        GCC support for this code model is available via a new command-line
   15514        option, -mplt. There is also a new configure-time option,
   15515        --with-mips-plt, to make -mplt the default.
   15516        The new code model requires support from the assembler, the linker,
   15517        and the runtime C library. This support is available in binutils
   15518        2.19 and GLIBC 2.9.
   15519      * GCC can now generate MIPS16 code for 32-bit GNU/Linux executables
   15520        and 32-bit GNU/Linux shared libraries. This feature requires GNU
   15521        binutils 2.19 or above.
   15522      * Support for RMI's XLR processor is now available through the
   15523        -march=xlr and -mtune=xlr options.
   15524      * 64-bit targets can now perform 128-bit multiplications inline,
   15525        instead of relying on a libgcc function.
   15526      * Native GNU/Linux toolchains now support -march=native and
   15527        -mtune=native, which select the host processor.
   15528      * GCC now supports the R10K, R12K, R14K and R16K processors. The
   15529        canonical -march= and -mtune= names for these processors are
   15530        r10000, r12000, r14000 and r16000 respectively.
   15531      * GCC can now work around the side effects of speculative execution
   15532        on R10K processors. Please see the documentation of the
   15533        -mr10k-cache-barrier option for details.
   15534      * Support for the MIPS64 Release 2 instruction set has been added.
   15535        The option -march=mips64r2 enables generation of these
   15536        instructions.
   15537      * GCC now supports Cavium Networks' Octeon processor. This support is
   15538        available through the -march=octeon and -mtune=octeon options.
   15539      * GCC now supports STMicroelectronics' Loongson 2E/2F processors. The
   15540        canonical -march= and -mtune= names for these processors are
   15541        loongson2e and loongson2f.
   15542 
   15543   [12]picochip
   15544 
   15545    Picochip is a 16-bit processor. A typical picoChip contains over 250
   15546    small cores, each with small amounts of memory. There are three
   15547    processor variants (STAN, MEM and CTRL) with different instruction sets
   15548    and memory configurations and they can be chosen using the -mae option.
   15549 
   15550    This port is intended to be a "C" only port.
   15551 
   15552   Power Architecture and PowerPC
   15553 
   15554      * GCC now supports the e300c2, e300c3 and e500mc processors.
   15555      * GCC now supports Xilinx processors with a single-precision FPU.
   15556      * Decimal floating point is now supported for e500 processors.
   15557 
   15558   S/390, zSeries and System z9/z10
   15559 
   15560      * Support for the IBM System z10 EC/BC processor has been added. When
   15561        using the -march=z10 option, the compiler will generate code making
   15562        use of instructions provided by the General-Instruction-Extension
   15563        Facility and the Execute-Extension Facility.
   15564 
   15565   VxWorks
   15566 
   15567      * GCC now supports the thread-local storage mechanism used on
   15568        VxWorks.
   15569 
   15570   Xtensa
   15571 
   15572      * GCC now supports thread-local storage (TLS) for Xtensa processor
   15573        configurations that include the Thread Pointer option. TLS also
   15574        requires support from the assembler and linker; this support is
   15575        provided in the GNU binutils beginning with version 2.19.
   15576 
   15577 Documentation improvements
   15578 
   15579 Other significant improvements
   15580 
   15581 [13]GCC 4.4.1
   15582 
   15583    This is the [14]list of problem reports (PRs) from GCC's bug tracking
   15584    system that are known to be fixed in the 4.4.1 release. This list might
   15585    not be complete (that is, it is possible that some PRs that have been
   15586    fixed are not listed here).
   15587 
   15588 [15]GCC 4.4.2
   15589 
   15590    This is the [16]list of problem reports (PRs) from GCC's bug tracking
   15591    system that are known to be fixed in the 4.4.2 release. This list might
   15592    not be complete (that is, it is possible that some PRs that have been
   15593    fixed are not listed here).
   15594 
   15595 [17]GCC 4.4.3
   15596 
   15597    This is the [18]list of problem reports (PRs) from GCC's bug tracking
   15598    system that are known to be fixed in the 4.4.3 release. This list might
   15599    not be complete (that is, it is possible that some PRs that have been
   15600    fixed are not listed here).
   15601 
   15602 [19]GCC 4.4.4
   15603 
   15604    This is the [20]list of problem reports (PRs) from GCC's bug tracking
   15605    system that are known to be fixed in the 4.4.4 release. This list might
   15606    not be complete (that is, it is possible that some PRs that have been
   15607    fixed are not listed here).
   15608 
   15609 [21]GCC 4.4.5
   15610 
   15611    This is the [22]list of problem reports (PRs) from GCC's bug tracking
   15612    system that are known to be fixed in the 4.4.5 release. This list might
   15613    not be complete (that is, it is possible that some PRs that have been
   15614    fixed are not listed here).
   15615 
   15616 [23]GCC 4.4.6
   15617 
   15618    This is the [24]list of problem reports (PRs) from GCC's bug tracking
   15619    system that are known to be fixed in the 4.4.6 release. This list might
   15620    not be complete (that is, it is possible that some PRs that have been
   15621    fixed are not listed here).
   15622 
   15623 [25]GCC 4.4.7
   15624 
   15625    This is the [26]list of problem reports (PRs) from GCC's bug tracking
   15626    system that are known to be fixed in the 4.4.7 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 
   15631     For questions related to the use of GCC, please consult these web
   15632     pages and the [27]GCC manuals. If that fails, the
   15633     [28]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   15634     web pages and the development of GCC are welcome on our developer
   15635     list at [29]gcc (a] gcc.gnu.org. All of [30]our lists have public
   15636     archives.
   15637 
   15638    Copyright (C) [31]Free Software Foundation, Inc. Verbatim copying and
   15639    distribution of this entire article is permitted in any medium,
   15640    provided this notice is preserved.
   15641 
   15642    These pages are [32]maintained by the GCC team. Last modified
   15643    2025-01-31.
   15644 
   15645 References
   15646 
   15647    1. https://gcc.gnu.org/gcc-4.4/changes.html#4.4.7
   15648    2. https://gcc.gnu.org/gcc-4.3/changes.html#obsoleted
   15649    3. https://gcc.gnu.org/gcc-4.4/porting_to.html
   15650    4. https://gcc.gnu.org/wiki/Graphite
   15651    5. https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1040.pdf
   15652    6. https://gcc.gnu.org/gcc-4.4/cxx0x_status.html
   15653    7. https://gcc.gnu.org/onlinedocs/gfortran/Preprocessing-Options.html
   15654    8. https://gcc.gnu.org/onlinedocs/gfortran/Error-and-Warning-Options.html#index-g_t_0040code_007bWarray-temporaries_007d-125
   15655    9. https://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfcheck-array-temporaries_007d-221
   15656   10. https://gcc.gnu.org/onlinedocs/gfortran/Fortran-Dialect-Options.html#index-g_t_0040code_007bbackslash_007d-34
   15657   11. https://gcc.gnu.org/gcc-4.4/changes.html#targets
   15658   12. https://gcc.gnu.org/gcc-4.4/changes.html#picochip
   15659   13. https://gcc.gnu.org/gcc-4.4/changes.html#GCC4.4.1
   15660   14. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.1
   15661   15. https://gcc.gnu.org/gcc-4.4/changes.html#GCC4.4.2
   15662   16. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.2
   15663   17. https://gcc.gnu.org/gcc-4.4/changes.html#GCC4.4.3
   15664   18. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.3
   15665   19. https://gcc.gnu.org/gcc-4.4/changes.html#GCC4.4.4
   15666   20. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.4
   15667   21. https://gcc.gnu.org/gcc-4.4/changes.html#GCC4.4.5
   15668   22. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.5
   15669   23. https://gcc.gnu.org/gcc-4.4/changes.html#GCC4.4.6
   15670   24. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.6
   15671   25. https://gcc.gnu.org/gcc-4.4/changes.html#GCC4.4.7
   15672   26. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.7
   15673   27. https://gcc.gnu.org/onlinedocs/
   15674   28. mailto:gcc-help (a] gcc.gnu.org
   15675   29. mailto:gcc (a] gcc.gnu.org
   15676   30. https://gcc.gnu.org/lists.html
   15677   31. https://www.fsf.org/
   15678   32. https://gcc.gnu.org/about.html
   15679 ======================================================================
   15680 http://gcc.gnu.org/gcc-4.3/index.html
   15681 
   15682                              GCC 4.3 Release Series
   15683 
   15684    (This release series is no longer supported.)
   15685 
   15686    Jun 27, 2011
   15687 
   15688    The [1]GNU project and the GCC developers are pleased to announce the
   15689    release of GCC 4.3.6.
   15690 
   15691    This release is a bug-fix release, containing fixes for regressions in
   15692    GCC 4.3.5 relative to previous releases of GCC.
   15693 
   15694 Release History
   15695 
   15696    GCC 4.3.6
   15697           Jun 27, 2011 ([2]changes)
   15698 
   15699    GCC 4.3.5
   15700           May 22, 2010 ([3]changes)
   15701 
   15702    GCC 4.3.4
   15703           August 4, 2009 ([4]changes)
   15704 
   15705    GCC 4.3.3
   15706           January 24, 2009 ([5]changes)
   15707 
   15708    GCC 4.3.2
   15709           August 27, 2008 ([6]changes)
   15710 
   15711    GCC 4.3.1
   15712           June 6, 2008 ([7]changes)
   15713 
   15714    GCC 4.3.0
   15715           March 5, 2008 ([8]changes)
   15716 
   15717 References and Acknowledgements
   15718 
   15719    GCC used to stand for the GNU C Compiler, but since the compiler
   15720    supports several other languages aside from C, it now stands for the
   15721    GNU Compiler Collection.
   15722 
   15723    A list of [9]successful builds is updated as new information becomes
   15724    available.
   15725 
   15726    The GCC developers would like to thank the numerous people that have
   15727    contributed new features, improvements, bug fixes, and other changes as
   15728    well as test results to GCC. This [10]amazing group of volunteers is
   15729    what makes GCC successful.
   15730 
   15731    For additional information about GCC please refer to the [11]GCC
   15732    project web site or contact the [12]GCC development mailing list.
   15733 
   15734    To obtain GCC please use [13]our mirror sites or [14]our version
   15735    control system.
   15736 
   15737 
   15738     For questions related to the use of GCC, please consult these web
   15739     pages and the [15]GCC manuals. If that fails, the
   15740     [16]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   15741     web pages and the development of GCC are welcome on our developer
   15742     list at [17]gcc (a] gcc.gnu.org. All of [18]our lists have public
   15743     archives.
   15744 
   15745    Copyright (C) [19]Free Software Foundation, Inc. Verbatim copying and
   15746    distribution of this entire article is permitted in any medium,
   15747    provided this notice is preserved.
   15748 
   15749    These pages are [20]maintained by the GCC team. Last modified
   15750    2022-10-26.
   15751 
   15752 References
   15753 
   15754    1. http://www.gnu.org/
   15755    2. https://gcc.gnu.org/gcc-4.3/changes.html
   15756    3. https://gcc.gnu.org/gcc-4.3/changes.html
   15757    4. https://gcc.gnu.org/gcc-4.3/changes.html
   15758    5. https://gcc.gnu.org/gcc-4.3/changes.html
   15759    6. https://gcc.gnu.org/gcc-4.3/changes.html
   15760    7. https://gcc.gnu.org/gcc-4.3/changes.html
   15761    8. https://gcc.gnu.org/gcc-4.3/changes.html
   15762    9. https://gcc.gnu.org/gcc-4.3/buildstat.html
   15763   10. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   15764   11. https://gcc.gnu.org/index.html
   15765   12. mailto:gcc (a] gcc.gnu.org
   15766   13. https://gcc.gnu.org/mirrors.html
   15767   14. https://gcc.gnu.org/git.html
   15768   15. https://gcc.gnu.org/onlinedocs/
   15769   16. mailto:gcc-help (a] gcc.gnu.org
   15770   17. mailto:gcc (a] gcc.gnu.org
   15771   18. https://gcc.gnu.org/lists.html
   15772   19. https://www.fsf.org/
   15773   20. https://gcc.gnu.org/about.html
   15774 ======================================================================
   15775 http://gcc.gnu.org/gcc-4.3/changes.html
   15776 
   15777                              GCC 4.3 Release Series
   15778                         Changes, New Features, and Fixes
   15779 
   15780    The latest release in the 4.3 release series is [1]GCC 4.3.5.
   15781 
   15782 Caveats
   15783 
   15784      * GCC requires the [2]GMP and [3]MPFR libraries for building all the
   15785        various front-end languages it supports. See the [4]prerequisites
   15786        page for version requirements.
   15787      * ColdFire targets now treat long double as having the same format as
   15788        double. In earlier versions of GCC, they used the 68881 long double
   15789        format instead.
   15790      * The m68k-uclinux target now uses the same calling conventions as
   15791        m68k-linux-gnu. You can select the original calling conventions by
   15792        configuring for m68k-uclinuxoldabi instead. Note that
   15793        m68k-uclinuxoldabi also retains the original 80-bit long double on
   15794        ColdFire targets.
   15795      * The -fforce-mem option has been removed because it has had no
   15796        effect in the last few GCC releases.
   15797      * The i386 -msvr3-shlib option has been removed since it is no longer
   15798        used.
   15799      * Fastcall for i386 has been changed not to pass aggregate arguments
   15800        in registers, following Microsoft compilers.
   15801      * Support for the AOF assembler has been removed from the ARM back
   15802        end; this affects only the targets arm-semi-aof and armel-semi-aof,
   15803        which are no longer recognized. We removed these targets without a
   15804        deprecation period because we discovered that they have been
   15805        unusable since GCC 4.0.0.
   15806      * Support for the TMS320C3x/C4x processor (targets c4x-* and tic4x-*)
   15807        has been removed. This support had been deprecated since GCC 4.0.0.
   15808      * Support for a number of older systems and recently unmaintained or
   15809        untested target ports of GCC has been declared obsolete in GCC 4.3.
   15810        Unless there is activity to revive them, the next release of GCC
   15811        will have their sources permanently removed.
   15812        All GCC ports for the following processor architectures have been
   15813        declared obsolete:
   15814           + Morpho MT (mt-*)
   15815        The following aliases for processor architectures have been
   15816        declared obsolete. Users should use the indicated generic target
   15817        names instead, with compile-time options such as -mcpu or
   15818        configure-time options such as --with-cpu to control the
   15819        configuration more precisely.
   15820           + strongarm*-*-*, ep9312*-*-*, xscale*-*-* (use arm*-*-*
   15821             instead).
   15822           + parisc*-*-* (use hppa*-*-* instead).
   15823           + m680[012]0-*-* (use m68k-*-* instead).
   15824        All GCC ports for the following operating systems have been
   15825        declared obsolete:
   15826           + BeOS (*-*-beos*)
   15827           + kaOS (*-*-kaos*)
   15828           + GNU/Linux using the a.out object format (*-*-linux*aout*)
   15829           + GNU/Linux using version 1 of the GNU C Library
   15830             (*-*-linux*libc1*)
   15831           + Solaris versions before Solaris 7 (*-*-solaris2.[0-6],
   15832             *-*-solaris2.[0-6].*)
   15833           + Miscellaneous System V (*-*-sysv*)
   15834           + WindISS (*-*-windiss*)
   15835        Also, those for some individual systems on particular architectures
   15836        have been obsoleted:
   15837           + UNICOS/mk on DEC Alpha (alpha*-*-unicosmk*)
   15838           + CRIS with a.out object format (cris-*-aout)
   15839           + BSD 4.3 on PA-RISC (hppa1.1-*-bsd*)
   15840           + OSF/1 on PA-RISC (hppa1.1-*-osf*)
   15841           + PRO on PA-RISC (hppa1.1-*-pro*)
   15842           + Sequent PTX on IA32 (i[34567]86-sequent-ptx4*,
   15843             i[34567]86-sequent-sysv4*)
   15844           + SCO Open Server 5 on IA32 (i[34567]86-*-sco3.2v5*)
   15845           + UWIN on IA32 (i[34567]86-*-uwin*) (support for UWIN as a host
   15846             was previously [5]removed in 2001, leaving only the support
   15847             for UWIN as a target now being deprecated)
   15848           + ChorusOS on PowerPC (powerpc-*-chorusos*)
   15849           + All VAX configurations apart from NetBSD and OpenBSD
   15850             (vax-*-bsd*, vax-*-sysv*, vax-*-ultrix*)
   15851      * The [6]-Wconversion option has been modified. Its purpose now is to
   15852        warn for implicit conversions that may alter a value. This new
   15853        behavior is available for both C and C++. Warnings about
   15854        conversions between signed and unsigned integers can be disabled by
   15855        using -Wno-sign-conversion. In C++, they are disabled by default
   15856        unless -Wsign-conversion is explicitly requested. The old behavior
   15857        of -Wconversion, that is, warn for prototypes causing a type
   15858        conversion that is different from what would happen to the same
   15859        argument in the absence of a prototype, has been moved to a new
   15860        option -Wtraditional-conversion, which is only available for C.
   15861      * The -m386, -m486, -mpentium and -mpentiumpro tuning options have
   15862        been removed because they were deprecated for more than 3 GCC major
   15863        releases. Use -mtune=i386, -mtune=i486, -mtune=pentium or
   15864        -mtune=pentiumpro as a replacement.
   15865      * The -funsafe-math-optimizations option now automatically turns on
   15866        -fno-trapping-math in addition to -fno-signed-zeros, as it enables
   15867        reassociation and thus may introduce or remove traps.
   15868      * The -ftree-vectorize option is now on by default under -O3. In
   15869        order to generate code for a SIMD extension, it has to be enabled
   15870        as well: use -maltivec for PowerPC platforms and -msse/-msse2 for
   15871        i?86 and x86_64.
   15872      * More information on porting to GCC 4.3 from previous versions of
   15873        GCC can be found in the [7]porting guide for this release.
   15874 
   15875 General Optimizer Improvements
   15876 
   15877      * The GCC middle-end has been integrated with the MPFR library. This
   15878        allows GCC to evaluate and replace at compile-time calls to
   15879        built-in math functions having constant arguments with their
   15880        mathematically equivalent results. In making use of MPFR, GCC can
   15881        generate correct results regardless of the math library
   15882        implementation or floating point precision of the host platform.
   15883        This also allows GCC to generate identical results regardless of
   15884        whether one compiles in native or cross-compile configurations to a
   15885        particular target. The following built-in functions take advantage
   15886        of this new capability: acos, acosh, asin, asinh, atan2, atan,
   15887        atanh, cbrt, cos, cosh, drem, erf, erfc, exp10, exp2, exp, expm1,
   15888        fdim, fma, fmax, fmin, gamma_r, hypot, j0, j1, jn, lgamma_r, log10,
   15889        log1p, log2, log, pow10, pow, remainder, remquo, sin, sincos, sinh,
   15890        tan, tanh, tgamma, y0, y1 and yn. The float and long double
   15891        variants of these functions (e.g. sinf and sinl) are also handled.
   15892        The sqrt and cabs functions with constant arguments were already
   15893        optimized in prior GCC releases. Now they also use MPFR.
   15894      * A new forward propagation pass on RTL was added. The new pass
   15895        replaces several slower transformations, resulting in compile-time
   15896        improvements as well as better code generation in some cases.
   15897      * A new command-line switch -frecord-gcc-switches has been added to
   15898        GCC, although it is only enabled for some targets. The switch
   15899        causes the command line that was used to invoke the compiler to be
   15900        recorded into the object file that is being created. The exact
   15901        format of this recording is target and binary file format
   15902        dependent, but it usually takes the form of a note section
   15903        containing ASCII text. The switch is related to the -fverbose-asm
   15904        switch, but that one only records the information in the assembler
   15905        output file as comments, so the information never reaches the
   15906        object file.
   15907      * The inliner heuristic is now aware of stack frame consumption. New
   15908        command-line parameters --param large-stack-frame and --param
   15909        large-stack-frame-growth can be used to limit stack frame size
   15910        growth caused by inlining.
   15911      * During feedback directed optimizations, the expected block size the
   15912        memcpy, memset and bzero functions operate on is discovered and for
   15913        cases of commonly used small sizes, specialized inline code is
   15914        generated.
   15915      * __builtin_expect no longer requires its argument to be a compile
   15916        time constant.
   15917      * Interprocedural optimization was reorganized to work on functions
   15918        in SSA form. This enables more precise and cheaper dataflow
   15919        analysis and makes writing interprocedural optimizations easier.
   15920        The following improvements have been implemented on top of this
   15921        framework:
   15922           + Pre-inline optimization: Selected local optimization passes
   15923             are run before the inliner (and other interprocedural passes)
   15924             are executed. This significantly improves the accuracy of code
   15925             growth estimates used by the inliner and reduces the overall
   15926             memory footprint for large compilation units.
   15927           + Early inlining (a simple bottom-up inliner pass inlining only
   15928             functions whose body is smaller than the expected call
   15929             overhead) is now executed with the early optimization passes,
   15930             thus inlining already optimized function bodies into an
   15931             unoptimized function that is subsequently optimized by early
   15932             optimizers. This enables the compiler to quickly eliminate
   15933             abstraction penalty in C++ programs.
   15934           + Interprocedural constant propagation now operate on SSA form
   15935             increasing accuracy of the analysis.
   15936      * A new internal representation for GIMPLE statements has been
   15937        contributed, resulting in compile-time memory savings.
   15938      * The vectorizer was enhanced to support vectorization of outer
   15939        loops, intra-iteration parallelism (loop-aware SLP), vectorization
   15940        of strided accesses and loops with multiple data-types. Run-time
   15941        dependency testing using loop versioning was added. The cost model,
   15942        turned on by -fvect-cost-model, was developed.
   15943 
   15944 New Languages and Language specific improvements
   15945 
   15946      * We have added new command-line options
   15947        -finstrument-functions-exclude-function-list and
   15948        -finstrument-functions-exclude-file-list. They provide more control
   15949        over which functions are annotated by the -finstrument-functions
   15950        option.
   15951 
   15952   C family
   15953 
   15954      * Implicit conversions between generic vector types are now only
   15955        permitted when the two vectors in question have the same number of
   15956        elements and compatible element types. (Note that the restriction
   15957        involves compatible element types, not implicitly-convertible
   15958        element types: thus, a vector type with element type int may not be
   15959        implicitly converted to a vector type with element type unsigned
   15960        int.) This restriction, which is in line with specifications for
   15961        SIMD architectures such as AltiVec, may be relaxed using the flag
   15962        -flax-vector-conversions. This flag is intended only as a
   15963        compatibility measure and should not be used for new code.
   15964      * -Warray-bounds has been added and is now enabled by default for
   15965        -Wall . It produces warnings for array subscripts that can be
   15966        determined at compile time to be always out of bounds.
   15967        -Wno-array-bounds will disable the warning.
   15968      * The constructor and destructor function attributes now accept
   15969        optional priority arguments which control the order in which the
   15970        constructor and destructor functions are run.
   15971      * New [8]command-line options -Wtype-limits, -Wold-style-declaration,
   15972        -Wmissing-parameter-type, -Wempty-body, -Wclobbered and
   15973        -Wignored-qualifiers have been added for finer control of the
   15974        diverse warnings enabled by -Wextra.
   15975      * A new function attribute alloc_size has been added to mark up
   15976        malloc style functions. For constant sized allocations this can be
   15977        used to find out the size of the returned pointer using the
   15978        __builtin_object_size() function for buffer overflow checking and
   15979        similar. This supplements the already built-in malloc and calloc
   15980        constant size handling.
   15981      * Integer constants written in binary are now supported as a GCC
   15982        extension. They consist of a prefix 0b or 0B, followed by a
   15983        sequence of 0 and 1 digits.
   15984      * A new predefined macro __COUNTER__ has been added. It expands to
   15985        sequential integral values starting from 0. In conjunction with the
   15986        ## operator, this provides a convenient means to generate unique
   15987        identifiers.
   15988      * A new command-line option -fdirectives-only has been added. It
   15989        enables a special preprocessing mode which improves the performance
   15990        of applications like distcc and ccache.
   15991      * Fixed-point data types and operators have been added. They are
   15992        based on Chapter 4 of the Embedded-C specification (n1169.pdf).
   15993        Currently, only MIPS targets are supported.
   15994      * Decimal floating-point arithmetic based on draft ISO/IEC TR 24732,
   15995        N1241, is now supported as a GCC extension to C for targets
   15996        i[34567]86-*-linux-gnu, powerpc*-*-linux-gnu, s390*-ibm-linux-gnu,
   15997        and x86_64-*-linux-gnu. The feature introduces new data types
   15998        _Decimal32, _Decimal64, and _Decimal128 with constant suffixes DF,
   15999        DD, and DL.
   16000 
   16001   C++
   16002 
   16003      * [9]Experimental support for the upcoming ISO C++ standard, C++0x.
   16004      * -Wc++0x-compat has been added and is now enabled by default for
   16005        -Wall. It produces warnings for constructs whose meaning differs
   16006        between ISO C++ 1998 and C++0x.
   16007      * The -Wparentheses option now works for C++ as it does for C. It
   16008        warns if parentheses are omitted when operators with confusing
   16009        precedence are nested. It also warns about ambiguous else
   16010        statements. Since -Wparentheses is enabled by -Wall, this may cause
   16011        additional warnings with existing C++ code which uses -Wall. These
   16012        new warnings may be disabled by using -Wall -Wno-parentheses.
   16013      * The -Wmissing-declarations now works for C++ as it does for C.
   16014      * The -fvisibility-ms-compat flag was added, to make it easier to
   16015        port larger projects using shared libraries from Microsoft's Visual
   16016        Studio to ELF and Mach-O systems.
   16017      * C++ attribute handling has been overhauled for template arguments
   16018        (ie dependent types). In particular, __attribute__((aligned(T)));
   16019        works for C++ types.
   16020 
   16021     Runtime Library (libstdc++)
   16022 
   16023      * [10]Experimental support for the upcoming ISO C++ standard, C++0x.
   16024      * Support for TR1 mathematical special functions and regular
   16025        expressions.
   16026      * Default what implementations give more elaborate exception strings
   16027        for bad_cast, bad_typeid, bad_exception, and bad_alloc.
   16028      * Header dependencies have been streamlined, reducing unnecessary
   16029        includes and pre-processed bloat.
   16030      * Variadic template implementations of items in <tuple> and
   16031        <functional>.
   16032      * An experimental [11]parallel mode has been added. This is a
   16033        parallel implementation of many C++ Standard library algorithms,
   16034        like std::accumulate, std::for_each, std::transform, or std::sort,
   16035        to give but four examples. These algorithms can be substituted for
   16036        the normal (sequential) libstdc++ algorithms on a piecemeal basis,
   16037        or all existing algorithms can be transformed via the
   16038        -D_GLIBCXX_PARALLEL macro.
   16039      * Debug mode versions of classes in <unordered_set> and
   16040        <unordered_map>.
   16041      * Formal deprecation of <ext/hash_set> and <ext/hash_map>, which are
   16042        now <backward/hash_set> and <backward/hash_map>. This code:
   16043     #include <ext/hash_set>
   16044     __gnu_cxx::hash_set<int> s;
   16045 
   16046        Can be transformed (in order of preference) to:
   16047     #include <tr1/unordered_set>
   16048     std::tr1::unordered_set<int> s;
   16049 
   16050        or
   16051     #include <backward/hash_set>
   16052     __gnu_cxx::hash_set<int> s;
   16053 
   16054        Similar transformations apply to __gnu_cxx::hash_map,
   16055        __gnu_cxx::hash_multimap, __gnu_cxx::hash_set,
   16056        __gnu_cxx::hash_multiset.
   16057 
   16058   Fortran
   16059 
   16060      * Due to the fact that the GMP and MPFR libraries are required for
   16061        all languages, Fortran is no longer special in this regard and is
   16062        available by default.
   16063      * The [12]-fexternal-blas option has been added, which generates
   16064        calls to BLAS routines for intrinsic matrix operations such as
   16065        matmul rather than using the built-in algorithms.
   16066      * Support to give a backtrace (compiler flag -fbacktrace or
   16067        environment variable GFORTRAN_ERROR_BACKTRACE; on glibc systems
   16068        only) or a core dump (-fdump-core, GFORTRAN_ERROR_DUMPCORE) when a
   16069        run-time error occured.
   16070      * GNU Fortran now defines __GFORTRAN__ when it runs the C
   16071        preprocessor (CPP).
   16072      * The [13]-finit-local-zero, -finit-real, -finit-integer,
   16073        -finit-character, and -finit-logical options have been added, which
   16074        can be used to initialize local variables.
   16075      * The intrinsic procedures [14]GAMMA and [15]LGAMMA have been added,
   16076        which calculate the Gamma function and its logarithm. Use EXTERNAL
   16077        gamma if you want to use your own gamma function.
   16078      * GNU Fortran now regards the backslash character as literal (as
   16079        required by the Fortran 2003 standard); using [16]-fbackslash GNU
   16080        Fortran interprets backslashes as C-style escape characters.
   16081      * The [17]interpretation of binary, octal and hexadecimal (BOZ)
   16082        literal constants has been changed. Before they were always
   16083        interpreted as integer; now they are bit-wise transferred as
   16084        argument of INT, REAL, DBLE and CMPLX as required by the Fortran
   16085        2003 standard, and for real and complex variables in DATA
   16086        statements or when directly assigned to real and complex variables.
   16087        Everywhere else and especially in expressions they are still
   16088        regarded as integer constants.
   16089      * Fortran 2003 support has been extended:
   16090           + Intrinsic statements IMPORT, PROTECTED, VALUE and VOLATILE
   16091           + Pointer intent
   16092           + Intrinsic module ISO_ENV_FORTRAN
   16093           + Interoperability with C (ISO C Bindings)
   16094           + ABSTRACT INTERFACES and PROCEDURE statements (without POINTER
   16095             attribute)
   16096           + Fortran 2003 BOZ
   16097 
   16098   Java (GCJ)
   16099 
   16100      * GCJ now uses the Eclipse Java compiler for its Java parsing needs.
   16101        This enables the use of all 1.5 language features, and fixes most
   16102        existing front end bugs.
   16103      * libgcj now supports all 1.5 language features which require runtime
   16104        support: foreach, enum, annotations, generics, and auto-boxing.
   16105      * We've made many changes to the tools shipped with gcj.
   16106           + The old jv-scan tool has been removed. This tool never really
   16107             worked properly. There is no replacement.
   16108           + gcjh has been rewritten. Some of its more obscure options no
   16109             longer work, but are still recognized in an attempt at
   16110             compatibility. gjavah is a new program with similar
   16111             functionality but different command-line options.
   16112           + grmic and grmiregistry have been rewritten. grmid has been
   16113             added.
   16114           + gjar replaces the old fastjar.
   16115           + gjarsigner (used for signing jars), gkeytool (used for key
   16116             management), gorbd (for CORBA), gserialver (computes
   16117             serialization UIDs), and gtnameserv (also for CORBA) are now
   16118             installed.
   16119      * The ability to dump the contents of the java run time heap to a
   16120        file for off-line analysis has been added. The heap dumps may be
   16121        analyzed with the new gc-analyze tool. They may be generated on
   16122        out-of-memory conditions or on demand and are controlled by the new
   16123        run time class gnu.gcj.util.GCInfo.
   16124      * java.util.TimeZone can now read files from /usr/share/zoneinfo to
   16125        provide correct, updated, timezone information. This means that
   16126        packagers no longer have to update libgcj when a time zone change
   16127        is published.
   16128 
   16129 [18]New Targets and Target Specific Improvements
   16130 
   16131   IA-32/x86-64
   16132 
   16133      * Tuning for Intel Core 2 processors is available via -mtune=core2
   16134        and -march=core2.
   16135      * Tuning for AMD Geode processors is available via -mtune=geode and
   16136        -march=geode.
   16137      * Code generation of block move (memcpy) and block set (memset) was
   16138        rewritten. GCC can now pick the best algorithm (loop, unrolled
   16139        loop, instruction with rep prefix or a library call) based on the
   16140        size of the block being copied and the CPU being optimized for. A
   16141        new option -minline-stringops-dynamically has been added. With this
   16142        option string operations of unknown size are expanded such that
   16143        small blocks are copied by in-line code, while for large blocks a
   16144        library call is used. This results in faster code than
   16145        -minline-all-stringops when the library implementation is capable
   16146        of using cache hierarchy hints. The heuristic choosing the
   16147        particular algorithm can be overwritten via -mstringop-strategy.
   16148        Newly also memset of values different from 0 is inlined.
   16149      * GCC no longer places the cld instruction before string operations.
   16150        Both i386 and x86-64 ABI documents mandate the direction flag to be
   16151        clear at the entry of a function. It is now invalid to set the flag
   16152        in asm statement without reseting it afterward.
   16153      * Support for SSSE3 built-in functions and code generation are
   16154        available via -mssse3.
   16155      * Support for SSE4.1 built-in functions and code generation are
   16156        available via -msse4.1.
   16157      * Support for SSE4.2 built-in functions and code generation are
   16158        available via -msse4.2.
   16159      * Both SSE4.1 and SSE4.2 support can be enabled via -msse4.
   16160      * A new set of options -mpc32, -mpc64 and -mpc80 have been added to
   16161        allow explicit control of x87 floating point precision.
   16162      * Support for __float128 (TFmode) IEEE quad type and corresponding
   16163        TCmode IEEE complex quad type is available via the soft-fp library
   16164        on x86_64 targets. This includes basic arithmetic operations
   16165        (addition, subtraction, negation, multiplication and division) on
   16166        __float128 real and TCmode complex values, the full set of IEEE
   16167        comparisons between __float128 values, conversions to and from
   16168        float, double and long double floating point types, as well as
   16169        conversions to and from signed or unsigned integer, signed or
   16170        unsigned long integer and signed or unsigned quad (TImode) integer
   16171        types. Additionally, all operations generate the full set of IEEE
   16172        exceptions and support the full set of IEEE rounding modes.
   16173      * GCC can now utilize the ACML library for vectorizing calls to a set
   16174        of C99 functions on x86_64 if -mveclibabi=acml is specified and you
   16175        link to an ACML ABI compatible library.
   16176 
   16177   ARM
   16178 
   16179      * Compiler and Library support for Thumb-2 and the ARMv7 architecture
   16180        has been added.
   16181 
   16182   [19]CRIS
   16183 
   16184     New features
   16185 
   16186      * Compiler and Library support for the CRIS v32 architecture, as
   16187        found in Axis Communications ETRAX FS and ARTPEC-3 chips, has been
   16188        added.
   16189 
   16190     Configuration changes
   16191 
   16192      * The cris-*-elf target now includes support for CRIS v32, including
   16193        libraries, through the -march=v32 option.
   16194      * A new crisv32-*-elf target defaults to generate code for CRIS v32.
   16195      * A new crisv32-*-linux* target defaults to generate code for CRIS
   16196        v32.
   16197      * The cris-*-aout target has been obsoleted.
   16198 
   16199     Improved support for built-in functions
   16200 
   16201      * GCC can now use the lz and swapwbr instructions to implement the
   16202        __builtin_clz, __builtin_ctz and __builtin_ffs family of functions.
   16203      * __builtin_bswap32 is now implemented using the swapwb instruction,
   16204        when available.
   16205 
   16206   [20]m68k and ColdFire
   16207 
   16208     New features
   16209 
   16210      * Support for several new ColdFire processors has been added. You can
   16211        generate code for them using the new -mcpu option.
   16212      * All targets now support ColdFire processors.
   16213      * m68k-uclinux targets have improved support for C++ constructors and
   16214        destructors, and for shared libraries.
   16215      * It is now possible to set breakpoints on the first or last line of
   16216        a function, even if there are no statements on that line.
   16217 
   16218     Optimizations
   16219 
   16220      * Support for sibling calls has been added.
   16221      * More use is now made of the ColdFire mov3q instruction.
   16222      * __builtin_clz is now implemented using the ff1 ColdFire
   16223        instruction, when available.
   16224      * GCC now honors the -m68010 option. 68010 code now uses clr rather
   16225        than move to zero volatile memory.
   16226      * 68020 targets and above can now use symbol(index.size*scale)
   16227        addresses for indexed array accesses. Earlier compilers would
   16228        always load the symbol into a base register first.
   16229 
   16230     Configuration changes
   16231 
   16232      * All m68k and ColdFire targets now allow the default processor to be
   16233        set at configure time using --with-cpu.
   16234      * A --with-arch configuration option has been added. This option
   16235        allows you to restrict a target to ColdFire or non-ColdFire
   16236        processors.
   16237 
   16238     Preprocessor macros
   16239 
   16240      * An __mcfv*__ macro is now defined for all ColdFire targets.
   16241        (Earlier versions of GCC only defined __mcfv4e__.)
   16242      * __mcf_cpu_*, __mcf_family_* and __mcffpu__ macros have been added.
   16243      * All targets now define __mc68010 and __mc68010__ when generating
   16244        68010 code.
   16245 
   16246     Command-line changes
   16247 
   16248      * New command-line options -march, -mcpu, -mtune and -mhard-float
   16249        have been added. These options apply to both m68k and ColdFire
   16250        targets.
   16251      * -mno-short, -mno-bitfield and -mno-rtd are now accepted as negative
   16252        versions of -mshort, etc.
   16253      * -fforce-addr has been removed. It is now ignored by the compiler.
   16254 
   16255     Other improvements
   16256 
   16257      * ColdFire targets now try to maintain a 4-byte-aligned stack where
   16258        possible.
   16259      * m68k-uclinux targets now try to avoid situations that lead to the
   16260        load-time error: BINFMT_FLAT: reloc outside program.
   16261 
   16262   MIPS
   16263 
   16264     Changes to existing configurations
   16265 
   16266      * libffi and libjava now support all three GNU/Linux ABIs: o32, n32
   16267        and n64. Every GNU/Linux configuration now builds these libraries
   16268        by default.
   16269      * GNU/Linux configurations now generate -mno-shared code unless
   16270        overridden by -fpic, -fPIC, -fpie or -fPIE.
   16271      * mipsisa32*-linux-gnu configurations now generate hard-float code by
   16272        default, just like other mipsisa32* and mips*-linux-gnu
   16273        configurations. You can build a soft-float version of any
   16274        mips*-linux-gnu configuration by passing --with-float=soft to
   16275        configure.
   16276      * mips-wrs-vxworks now supports run-time processes (RTPs).
   16277 
   16278     Changes to existing command-line options
   16279 
   16280      * The -march and -mtune options no longer accept 24k as a processor
   16281        name. Please use 24kc, 24kf2_1 or 24kf1_1 instead.
   16282      * The -march and -mtune options now accept 24kf2_1, 24kef2_1 and
   16283        34kf2_1 as synonyms for 24kf, 24kef and 34kf respectively. The
   16284        options also accept 24kf1_1, 24kef1_1 and 34kf1_1 as synonyms for
   16285        24kx, 24kex and 34kx.
   16286 
   16287     New configurations
   16288 
   16289    GCC now supports the following configurations:
   16290      * mipsisa32r2*-linux-gnu*, which generates MIPS32 revision 2 code by
   16291        default. Earlier releases also recognized this configuration, but
   16292        they treated it in the same way as mipsisa32*-linux-gnu*. Note that
   16293        you can customize any mips*-linux-gnu* configuration to a
   16294        particular ISA or processor by passing an appropriate --with-arch
   16295        option to configure.
   16296      * mipsisa*-sde-elf*, which provides compatibility with MIPS
   16297        Technologies' SDE toolchains. The configuration uses the SDE
   16298        libraries by default, but you can use it like other newlib-based
   16299        ELF configurations by passing --with-newlib to configure. It is the
   16300        only configuration besides mips64vr*-elf* to build MIPS16 as well
   16301        as non-MIPS16 libraries.
   16302      * mipsisa*-elfoabi*, which is similar to the general mipsisa*-elf*
   16303        configuration, but uses the o32 and o64 ABIs instead of the 32-bit
   16304        and 64-bit forms of the EABI.
   16305 
   16306     New processors and application-specific extensions
   16307 
   16308      * Support for the SmartMIPS ASE is available through the new
   16309        -msmartmips option.
   16310      * Support for revision 2 of the DSP ASE is available through the new
   16311        -mdspr2 option. A new preprocessor macro called __mips_dsp_rev
   16312        indicates the revision of the ASE in use.
   16313      * Support for the 4KS and 74K families of processors is available
   16314        through the -march and -mtune options.
   16315 
   16316     Improved support for built-in functions
   16317 
   16318      * GCC can now use load-linked, store-conditional and sync
   16319        instructions to implement atomic built-in functions such as
   16320        __sync_fetch_and_add. The memory reference must be 4 bytes wide for
   16321        32-bit targets and either 4 or 8 bytes wide for 64-bit targets.
   16322      * GCC can now use the clz and dclz instructions to implement the
   16323        __builtin_ctz and __builtin_ffs families of functions.
   16324      * There is a new __builtin___clear_cache function for flushing the
   16325        instruction cache. GCC expands this function inline on MIPS32
   16326        revision 2 targets, otherwise it calls the function specified by
   16327        -mcache-flush-func.
   16328 
   16329     MIPS16 improvements
   16330 
   16331      * GCC can now compile objects that contain a mixture of MIPS16 and
   16332        non-MIPS16 code. There are two new attributes, mips16 and nomips16,
   16333        for specifying which mode a function should use.
   16334      * A new option called -minterlink-mips16 makes non-MIPS16 code
   16335        link-compatible with MIPS16 code.
   16336      * After many bug fixes, the long-standing MIPS16 -mhard-float support
   16337        should now work fairly reliably.
   16338      * GCC can now use the MIPS16e save and restore instructions.
   16339      * -fsection-anchors now works in MIPS16 mode. MIPS16 code compiled
   16340        with -G0 -fsection-anchors is often smaller than code compiled with
   16341        -G8. However, please note that you must usually compile all objects
   16342        in your application with the same -G option; see the documentation
   16343        of -G for details.
   16344      * A new option called-mcode-readable specifies which instructions are
   16345        allowed to load from the code segment. -mcode-readable=yes is the
   16346        default and says that any instruction may load from the code
   16347        segment. The other alternatives are -mcode-readable=pcrel, which
   16348        says that only PC-relative MIPS16 instructions may load from the
   16349        code segment, and -mcode-readable=no, which says that no
   16350        instruction may do so. Please see the documentation for more
   16351        details, including example uses.
   16352 
   16353     Small-data improvements
   16354 
   16355    There are three new options for controlling small data:
   16356      * -mno-extern-sdata, which disables small-data accesses for
   16357        externally-defined variables. Code compiled with -Gn
   16358        -mno-extern-sdata will be link-compatible with any -G setting
   16359        between -G0 and -Gn inclusive.
   16360      * -mno-local-sdata, which disables the use of small-data sections for
   16361        data that is not externally visible. This option can be a useful
   16362        way of reducing small-data usage in less performance-critical parts
   16363        of an application.
   16364      * -mno-gpopt, which disables the use of the $gp register while still
   16365        honoring the -G limit when placing externally-visible data. This
   16366        option implies -mno-extern-sdata and -mno-local-sdata and it can be
   16367        useful in situations where $gp does not necessarily hold the
   16368        expected value.
   16369 
   16370     Miscellaneous improvements
   16371 
   16372      * There is a new option called -mbranch-cost for tweaking the
   16373        perceived cost of branches.
   16374      * If GCC is configured to use a version of GAS that supports the
   16375        .gnu_attribute directive, it will use that directive to record
   16376        certain properties of the output code. .gnu_attribute is new to GAS
   16377        2.18.
   16378      * There are two new function attributes, near and far, for overriding
   16379        the command-line setting of -mlong-calls on a function-by-function
   16380        basis.
   16381      * -mfp64, which previously required a 64-bit target, now works with
   16382        MIPS32 revision 2 targets as well. The mipsisa*-elfoabi* and
   16383        mipsisa*-sde-elf* configurations provide suitable library support.
   16384      * GCC now recognizes the -mdmx and -mmt options and passes them down
   16385        to the assembler. It does nothing else with the options at present.
   16386 
   16387   SPU (Synergistic Processor Unit) of the Cell Broadband Engine Architecture
   16388   (BEA)
   16389 
   16390      * Support has been added for this new architecture.
   16391 
   16392   RS6000 (POWER/PowerPC)
   16393 
   16394      * Support for the PowerPC 750CL paired-single instructions has been
   16395        added with a new powerpc-*-linux*paired* target configuration. It
   16396        is enabled by an associated -mpaired option and can be accessed
   16397        using new built-in functions.
   16398      * Support for auto-detecting architecture and system configuration to
   16399        auto-select processor optimization tuning.
   16400      * Support for VMX on AIX 5.3 has been added.
   16401      * Support for AIX Version 6.1 has been added.
   16402 
   16403   S/390, zSeries and System z9
   16404 
   16405      * Support for the IBM System z9 EC/BC processor (z9 GA3) has been
   16406        added. When using the -march=z9-ec option, the compiler will
   16407        generate code making use of instructions provided by the decimal
   16408        floating point facility and the floating point conversion facility
   16409        (pfpo). Besides the instructions used to implement decimal floating
   16410        point operations these facilities also contain instructions to move
   16411        between general purpose and floating point registers and to modify
   16412        and copy the sign-bit of floating point values.
   16413      * When the -march=z9-ec option is used the new
   16414        -mhard-dfp/-mno-hard-dfp options can be used to specify whether the
   16415        decimal floating point hardware instructions will be used or not.
   16416        If none of them is given the hardware support is enabled by
   16417        default.
   16418      * The -mstack-guard option can now be omitted when using stack
   16419        checking via -mstack-size in order to let GCC choose a sensible
   16420        stack guard value according to the frame size of each function.
   16421      * Various changes to improve performance of generated code have been
   16422        implemented, including:
   16423           + The condition code set by an add logical with carry
   16424             instruction is now available for overflow checks like: a + b +
   16425             carry < b.
   16426           + The test data class instruction is now used to implement
   16427             sign-bit and infinity checks of binary and decimal floating
   16428             point numbers.
   16429 
   16430   SPARC
   16431 
   16432      * Support for the Sun UltraSPARC T2 (Niagara 2) processor has been
   16433        added.
   16434 
   16435   Xtensa
   16436 
   16437      * Stack unwinding for exception handling now uses by default a
   16438        specialized version of DWARF unwinding. This is not
   16439        binary-compatible with the setjmp/longjmp (sjlj) unwinding used for
   16440        Xtensa with previous versions of GCC.
   16441      * For Xtensa processors that include the Conditional Store option,
   16442        the built-in functions for atomic memory access are now implemented
   16443        using S32C1I instructions.
   16444      * If the Xtensa NSA option is available, GCC will use it to implement
   16445        the __builtin_ctz and __builtin_clz functions.
   16446 
   16447 Documentation improvements
   16448 
   16449      * Existing libstdc++ documentation has been edited and restructured
   16450        into a single DocBook XML manual. The results can be viewed online
   16451        [21]here.
   16452 
   16453 Other significant improvements
   16454 
   16455      * The compiler's --help command-line option has been extended so that
   16456        it now takes an optional set of arguments. These arguments restrict
   16457        the information displayed to specific classes of command-line
   16458        options, and possibly only a subset of those options. It is also
   16459        now possible to replace the descriptive text associated with each
   16460        displayed option with an indication of its current value, or for
   16461        binary options, whether it has been enabled or disabled.
   16462        Here are some examples. The following will display all the options
   16463        controlling warning messages:
   16464       --help=warnings
   16465 
   16466        Whereas this will display all the undocumented, target specific
   16467        options:
   16468       --help=target,undocumented
   16469 
   16470        This sequence of commands will display the binary optimizations
   16471        that are enabled by -O3:
   16472       gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts
   16473       gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts
   16474       diff /tmp/O2-opts /tmp/O3-opts | grep enabled
   16475 
   16476      * The configure options --with-pkgversion and --with-bugurl have been
   16477        added. These allow distributors of GCC to include a
   16478        distributor-specific string in manuals and --version output and to
   16479        specify the URL for reporting bugs in their versions of GCC.
   16480 
   16481 [22]GCC 4.3.1
   16482 
   16483    This is the [23]list of problem reports (PRs) from GCC's bug tracking
   16484    system that are known to be fixed in the 4.3.1 release. This list might
   16485    not be complete (that is, it is possible that some PRs that have been
   16486    fixed are not listed here).
   16487 
   16488 Target Specific Changes
   16489 
   16490   IA-32/x86-64
   16491 
   16492     ABI changes
   16493 
   16494      * Starting with GCC 4.3.1, decimal floating point variables are
   16495        aligned to their natural boundaries when they are passed on the
   16496        stack for i386.
   16497 
   16498     Command-line changes
   16499 
   16500      * Starting with GCC 4.3.1, the -mcld option has been added to
   16501        automatically generate a cld instruction in the prologue of
   16502        functions that use string instructions. This option is used for
   16503        backward compatibility on some operating systems and can be enabled
   16504        by default for 32-bit x86 targets by configuring GCC with the
   16505        --enable-cld configure option.
   16506 
   16507 [24]GCC 4.3.2
   16508 
   16509    This is the [25]list of problem reports (PRs) from GCC's bug tracking
   16510    system that are known to be fixed in the 4.3.2 release. This list might
   16511    not be complete (that is, it is possible that some PRs that have been
   16512    fixed are not listed here).
   16513 
   16514 [26]GCC 4.3.3
   16515 
   16516    This is the [27]list of problem reports (PRs) from GCC's bug tracking
   16517    system that are known to be fixed in the 4.3.3 release. This list might
   16518    not be complete (that is, it is possible that some PRs that have been
   16519    fixed are not listed here).
   16520 
   16521 [28]GCC 4.3.4
   16522 
   16523    This is the [29]list of problem reports (PRs) from GCC's bug tracking
   16524    system that are known to be fixed in the 4.3.4 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 [30]GCC 4.3.5
   16529 
   16530    This is the [31]list of problem reports (PRs) from GCC's bug tracking
   16531    system that are known to be fixed in the 4.3.5 release. This list might
   16532    not be complete (that is, it is possible that some PRs that have been
   16533    fixed are not listed here).
   16534 
   16535 [32]GCC 4.3.6
   16536 
   16537    This is the [33]list of problem reports (PRs) from GCC's bug tracking
   16538    system that are known to be fixed in the 4.3.6 release. This list might
   16539    not be complete (that is, it is possible that some PRs that have been
   16540    fixed are not listed here).
   16541 
   16542 
   16543     For questions related to the use of GCC, please consult these web
   16544     pages and the [34]GCC manuals. If that fails, the
   16545     [35]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   16546     web pages and the development of GCC are welcome on our developer
   16547     list at [36]gcc (a] gcc.gnu.org. All of [37]our lists have public
   16548     archives.
   16549 
   16550    Copyright (C) [38]Free Software Foundation, Inc. Verbatim copying and
   16551    distribution of this entire article is permitted in any medium,
   16552    provided this notice is preserved.
   16553 
   16554    These pages are [39]maintained by the GCC team. Last modified
   16555    2025-01-31.
   16556 
   16557 References
   16558 
   16559    1. https://gcc.gnu.org/gcc-4.3/changes.html#4.3.5
   16560    2. https://gmplib.org/
   16561    3. https://www.mpfr.org/
   16562    4. https://gcc.gnu.org/install/prerequisites.html
   16563    5. https://gcc.gnu.org/ml/gcc-announce/2001/msg00000.html
   16564    6. https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#Warning-Options
   16565    7. https://gcc.gnu.org/gcc-4.3/porting_to.html
   16566    8. https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
   16567    9. https://gcc.gnu.org/gcc-4.3/cxx0x_status.html
   16568   10. https://gcc.gnu.org/gcc-4.3/cxx0x_status.html
   16569   11. https://gcc.gnu.org/onlinedocs/libstdc++/manual/parallel_mode.html
   16570   12. https://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html#Code-Gen-Options
   16571   13. https://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfinit-local-zero_007d-167
   16572   14. https://gcc.gnu.org/onlinedocs/gcc-4.3.0/gfortran/GAMMA.html
   16573   15. https://gcc.gnu.org/onlinedocs/gcc-4.3.0/gfortran/LGAMMA.html
   16574   16. https://gcc.gnu.org/onlinedocs/gfortran/Fortran-Dialect-Options.html
   16575   17. https://gcc.gnu.org/onlinedocs/gfortran/BOZ-literal-constants.html
   16576   18. https://gcc.gnu.org/gcc-4.3/changes.html#targets
   16577   19. https://gcc.gnu.org/gcc-4.3/changes.html#cris
   16578   20. https://gcc.gnu.org/gcc-4.3/changes.html#m68k
   16579   21. https://gcc.gnu.org/onlinedocs/libstdc++/
   16580   22. https://gcc.gnu.org/gcc-4.3/changes.html#GCC4.3.1
   16581   23. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.1
   16582   24. https://gcc.gnu.org/gcc-4.3/changes.html#GCC4.3.2
   16583   25. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.2
   16584   26. https://gcc.gnu.org/gcc-4.3/changes.html#GCC4.3.3
   16585   27. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.3
   16586   28. https://gcc.gnu.org/gcc-4.3/changes.html#GCC4.3.4
   16587   29. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.4
   16588   30. https://gcc.gnu.org/gcc-4.3/changes.html#GCC4.3.5
   16589   31. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.5
   16590   32. https://gcc.gnu.org/gcc-4.3/changes.html#GCC4.3.6
   16591   33. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.6
   16592   34. https://gcc.gnu.org/onlinedocs/
   16593   35. mailto:gcc-help (a] gcc.gnu.org
   16594   36. mailto:gcc (a] gcc.gnu.org
   16595   37. https://gcc.gnu.org/lists.html
   16596   38. https://www.fsf.org/
   16597   39. https://gcc.gnu.org/about.html
   16598 ======================================================================
   16599 http://gcc.gnu.org/gcc-4.2/index.html
   16600 
   16601                              GCC 4.2 Release Series
   16602 
   16603    (This release series is no longer supported.)
   16604 
   16605    May 19, 2008
   16606 
   16607    The [1]GNU project and the GCC developers are pleased to announce the
   16608    release of GCC 4.2.4.
   16609 
   16610    This release is a bug-fix release, containing fixes for regressions in
   16611    GCC 4.2.3 relative to previous releases of GCC.
   16612 
   16613 Release History
   16614 
   16615    GCC 4.2.4
   16616           May 19, 2008 ([2]changes)
   16617 
   16618    GCC 4.2.3
   16619           February 1, 2008 ([3]changes)
   16620 
   16621    GCC 4.2.2
   16622           October 7, 2007 ([4]changes)
   16623 
   16624    GCC 4.2.1
   16625           July 18, 2007 ([5]changes)
   16626 
   16627    GCC 4.2.0
   16628           May 13, 2007 ([6]changes)
   16629 
   16630 References and Acknowledgements
   16631 
   16632    GCC used to stand for the GNU C Compiler, but since the compiler
   16633    supports several other languages aside from C, it now stands for the
   16634    GNU Compiler Collection.
   16635 
   16636    A list of [7]successful builds is updated as new information becomes
   16637    available.
   16638 
   16639    The GCC developers would like to thank the numerous people that have
   16640    contributed new features, improvements, bug fixes, and other changes as
   16641    well as test results to GCC. This [8]amazing group of volunteers is
   16642    what makes GCC successful.
   16643 
   16644    For additional information about GCC please refer to the [9]GCC project
   16645    web site or contact the [10]GCC development mailing list.
   16646 
   16647    To obtain GCC please use [11]our mirror sites or [12]our version
   16648    control system.
   16649 
   16650 
   16651     For questions related to the use of GCC, please consult these web
   16652     pages and the [13]GCC manuals. If that fails, the
   16653     [14]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   16654     web pages and the development of GCC are welcome on our developer
   16655     list at [15]gcc (a] gcc.gnu.org. All of [16]our lists have public
   16656     archives.
   16657 
   16658    Copyright (C) [17]Free Software Foundation, Inc. Verbatim copying and
   16659    distribution of this entire article is permitted in any medium,
   16660    provided this notice is preserved.
   16661 
   16662    These pages are [18]maintained by the GCC team. Last modified
   16663    2022-10-26.
   16664 
   16665 References
   16666 
   16667    1. http://www.gnu.org/
   16668    2. https://gcc.gnu.org/gcc-4.2/changes.html
   16669    3. https://gcc.gnu.org/gcc-4.2/changes.html
   16670    4. https://gcc.gnu.org/gcc-4.2/changes.html
   16671    5. https://gcc.gnu.org/gcc-4.2/changes.html
   16672    6. https://gcc.gnu.org/gcc-4.2/changes.html
   16673    7. https://gcc.gnu.org/gcc-4.2/buildstat.html
   16674    8. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   16675    9. https://gcc.gnu.org/index.html
   16676   10. mailto:gcc (a] gcc.gnu.org
   16677   11. https://gcc.gnu.org/mirrors.html
   16678   12. https://gcc.gnu.org/git.html
   16679   13. https://gcc.gnu.org/onlinedocs/
   16680   14. mailto:gcc-help (a] gcc.gnu.org
   16681   15. mailto:gcc (a] gcc.gnu.org
   16682   16. https://gcc.gnu.org/lists.html
   16683   17. https://www.fsf.org/
   16684   18. https://gcc.gnu.org/about.html
   16685 ======================================================================
   16686 http://gcc.gnu.org/gcc-4.2/changes.html
   16687 
   16688                              GCC 4.2 Release Series
   16689                         Changes, New Features, and Fixes
   16690 
   16691 Caveats
   16692 
   16693      * GCC no longer accepts the -fshared-data option. This option has had
   16694        no effect in any GCC 4 release; the targets to which the option
   16695        used to apply had been removed before GCC 4.0.
   16696 
   16697 General Optimizer Improvements
   16698 
   16699      * New command-line options specify the possible relationships among
   16700        parameters and between parameters and global data. For example,
   16701        -fargument-noalias-anything specifies that arguments do not alias
   16702        any other storage.
   16703        Each language will automatically use whatever option is required by
   16704        the language standard. You should not need to use these options
   16705        yourself.
   16706 
   16707 New Languages and Language specific improvements
   16708 
   16709      * [1]OpenMP is now supported for the C, C++ and Fortran compilers.
   16710      * New command-line options -fstrict-overflow and -Wstrict-overflow
   16711        have been added. -fstrict-overflow tells the compiler that it may
   16712        assume that the program follows the strict signed overflow
   16713        semantics permitted for the language: for C and C++ this means that
   16714        the compiler may assume that signed overflow does not occur. For
   16715        example, a loop like
   16716       for (i = 1; i > 0; i *= 2)
   16717 
   16718        is presumably intended to continue looping until i overflows. With
   16719        -fstrict-overflow, the compiler may assume that signed overflow
   16720        will not occur, and transform this into an infinite loop.
   16721        -fstrict-overflow is turned on by default at -O2, and may be
   16722        disabled via -fno-strict-overflow. The -Wstrict-overflow option may
   16723        be used to warn about cases where the compiler assumes that signed
   16724        overflow will not occur. It takes five different levels:
   16725        -Wstrict-overflow=1 to 5. See the [2]documentation for details.
   16726        -Wstrict-overflow=1 is enabled by -Wall.
   16727      * The new command-line option -fno-toplevel-reorder directs GCC to
   16728        emit top-level functions, variables, and asm statements in the same
   16729        order that they appear in the input file. This is intended to
   16730        support existing code which relies on a particular ordering (for
   16731        example, code which uses top-level asm statements to switch
   16732        sections). For new code, it is generally better to use function and
   16733        variable attributes. The -fno-toplevel-reorder option may be used
   16734        for most cases which currently use -fno-unit-at-a-time. The
   16735        -fno-unit-at-a-time option will be removed in some future version
   16736        of GCC. If you know of a case which requires -fno-unit-at-a-time
   16737        which is not fixed by -fno-toplevel-reorder, please open a bug
   16738        report.
   16739 
   16740   C family
   16741 
   16742      * The pragma redefine_extname will now macro expand its tokens for
   16743        compatibility with SunPRO.
   16744      * In the next release of GCC, 4.3, -std=c99 or -std=gnu99 will direct
   16745        GCC to handle inline functions as specified in the C99 standard. In
   16746        preparation for this, GCC 4.2 will warn about any use of non-static
   16747        inline functions in gnu99 or c99 mode. This new warning may be
   16748        disabled with the new gnu_inline function attribute or the new
   16749        -fgnu89-inline command-line option. Also, GCC 4.2 and later will
   16750        define one of the preprocessor macros __GNUC_GNU_INLINE__ or
   16751        __GNUC_STDC_INLINE__ to indicate the semantics of inline functions
   16752        in the current compilation.
   16753      * A new command-line option -Waddress has been added to warn about
   16754        suspicious uses of memory addresses as, for example, using the
   16755        address of a function in a conditional expression, and comparisons
   16756        against the memory address of a string literal. This warning is
   16757        enabled by -Wall.
   16758 
   16759   C++
   16760 
   16761      * C++ visibility handling has been overhauled.
   16762        Restricted visiblity is propagated from classes to members, from
   16763        functions to local statics, and from templates and template
   16764        arguments to instantiations, unless the latter has explicitly
   16765        declared visibility.
   16766        The visibility attribute for a class must come between the
   16767        class-key and the name, not after the closing brace.
   16768        Attributes are now allowed for enums and elaborated-type-specifiers
   16769        that only declare a type.
   16770        Members of the anonymous namespace are now local to a particular
   16771        translation unit, along with any other declarations which use them,
   16772        though they are still treated as having external linkage for
   16773        language semantics.
   16774      * The (undocumented) extension which permitted templates with default
   16775        arguments to be bound to template template parameters with fewer
   16776        parameters has been removed. For example:
   16777         template <template <typename> class C>
   16778         void f(C<double>) {}
   16779 
   16780         template <typename T, typename U = int>
   16781         struct S {};
   16782 
   16783         template void f(S<double>);
   16784 
   16785        is no longer accepted by G++. The reason this code is not accepted
   16786        is that S is a template with two parameters; therefore, it cannot
   16787        be bound to C which has only one parameter.
   16788      * The <?, >?, <?=, and >?= operators, deprecated in previous GCC
   16789        releases, have been removed.
   16790      * The command-line option -fconst-strings, deprecated in previous GCC
   16791        releases, has been removed.
   16792      * The configure variable enable-__cxa_atexit is now enabled by
   16793        default for more targets. Enabling this variable is necessary in
   16794        order for static destructors to be executed in the correct order,
   16795        but it depends upon the presence of a non-standard C library in the
   16796        target library in order to work. The variable is now enabled for
   16797        more targets which are known to have suitable C libraries.
   16798      * -Wextra will produce warnings for if statements with a semicolon as
   16799        the only body, to catch code like:
   16800          if (a);
   16801             return 1;
   16802          return 0;
   16803 
   16804        To suppress the warning in valid cases, use { } instead.
   16805      * The C++ front end now also produces strict aliasing warnings when
   16806        -fstrict-aliasing -Wstrict-aliasing is in effect.
   16807 
   16808     Runtime Library (libstdc++)
   16809 
   16810      * Added support for TR1 <random>, <complex>, and C compatibility
   16811        headers. In addition, a lock-free version of shared_ptr was
   16812        contributed as part of Phillip Jordan's Google Summer of Code
   16813        project on lock-free containers.
   16814      * In association with the Summer of Code work on lock-free
   16815        containers, the interface for atomic builtins was adjusted,
   16816        creating simpler alternatives for non-threaded code paths. Also,
   16817        usage was consolidated and all elements were moved from namespace
   16818        std to namespace__gnu_cxx. Affected interfaces are the functions
   16819        __exchange_and_add, __atomic_add, and the objects __mutex,
   16820        __recursive_mutex, and __scoped_lock.
   16821      * Support for versioning weak symbol names via namespace association
   16822        was added. However, as this changes the names of exported symbols,
   16823        this is turned off by default in the current ABI. Intrepid users
   16824        can enable this feature by using
   16825        --enable-symvers=gnu-versioned-namespace during configuration.
   16826      * Revised, simplified, and expanded policy-based associative
   16827        containers, including data types for tree and trie forms
   16828        (basic_tree, tree, trie), lists (list_update), and both
   16829        collision-chaining and probing hash-based containers
   16830        (basic_hash_table, cc_hash_table, gp_hash_table). More details per
   16831        the [3]documentation.
   16832      * The implementation of the debug mode was modified, whereby the
   16833        debug namespaces were nested inside of namespace std and namespace
   16834        __gnu_cxx in order to resolve some long standing corner cases
   16835        involving name lookup. Debug functionality from the policy-based
   16836        data structures was consolidated and enabled with the single macro,
   16837        _GLIBCXX_DEBUG. See PR 26142 for more information.
   16838      * Added extensions for type traits: __conditional_type,
   16839        __numeric_traits, __add_unsigned, __removed_unsigned, __enable_if.
   16840      * Added a typelist implementation for compile-time meta-programming.
   16841        Elements for typelist construction and operation can be found
   16842        within namespace __gnu_cxx::typelist.
   16843      * Added a new allocator, __gnu_cxx::throw_allocator, for testing
   16844        exception-safety.
   16845      * Enabled library-wide visibility control, allowing -fvisibility to
   16846        be used.
   16847      * Consolidated all nested namespaces and the conversion of
   16848        __gnu_internal implementation-private details to anonymous
   16849        namespaces whenever possible.
   16850      * Implemented LWG resolutions DR 431 and DR 538.
   16851 
   16852   Fortran
   16853 
   16854      * Support for allocatable components has been added (TR 15581 and
   16855        Fortran 2003).
   16856      * Support for the Fortran 2003 streaming IO extension has been added.
   16857      * The GNU Fortran compiler now uses 4-byte record markers by default
   16858        for unformatted files to be compatible with g77 and most other
   16859        compilers. The implementation allows for records greater than 2 GB
   16860        and is compatible with several other compilers. Older versions of
   16861        gfortran used 8-byte record markers by default (on most systems).
   16862        In order to change the length of the record markers, e.g. to read
   16863        unformatted files created by older gfortran versions, the
   16864        [4]-frecord-marker=8 option can be used.
   16865 
   16866   Java (GCJ)
   16867 
   16868      * A new command-line option -static-libgcj has been added for targets
   16869        that use a linker compatible with GNU Binutils. As its name
   16870        implies, this causes libgcj to be linked statically. In some cases
   16871        this causes the resulting executable to start faster and use less
   16872        memory than if the shared version of libgcj were used. However
   16873        caution should be used as it can also cause essential parts of the
   16874        library to be omitted. Some of these issues are discussed in:
   16875        [5]https://gcc.gnu.org/wiki/Statically_linking_libgcj
   16876      * fastjar is no longer bundled with GCC. To build libgcj, you will
   16877        need either InfoZIP (both zip and unzip) or an external jar
   16878        program. In the former case, the GCC build will install a jar shell
   16879        script that is based on InfoZIP and provides the same functionality
   16880        as fastjar.
   16881 
   16882 [6]New Targets and Target Specific Improvements
   16883 
   16884   IA-32/x86-64
   16885 
   16886      * -mtune=generic can now be used to generate code running well on
   16887        common x86 chips. This includes AMD Athlon, AMD Opteron, Intel
   16888        Pentium-M, Intel Pentium 4 and Intel Core 2.
   16889      * -mtune=native and -march=native will produce code optimized for the
   16890        host architecture as detected using the cpuid instruction.
   16891      * Added a new command-line option -fstackrealign and and
   16892        __attribute__ ((force_align_arg_pointer)) to realign the stack at
   16893        runtime. This allows functions compiled with a vector-aligned stack
   16894        to be invoked from legacy objects that keep only word-alignment.
   16895 
   16896   SPARC
   16897 
   16898      * The default CPU setting has been changed from V7 to V9 in 32-bit
   16899        mode on Solaris 7 and above. This is already the case in 64-bit
   16900        mode. It can be overridden by specifying --with-cpu at configure
   16901        time.
   16902      * Back-end support of built-in functions for atomic memory access has
   16903        been implemented.
   16904      * Support for the Sun UltraSPARC T1 (Niagara) processor has been
   16905        added.
   16906 
   16907   M32C
   16908 
   16909      * Various bug fixes have made some functions (notably, functions
   16910        returning structures) incompatible with previous releases.
   16911        Recompiling all libraries is recommended. Note that code quality
   16912        has considerably improved since 4.1, making a recompile even more
   16913        beneficial.
   16914 
   16915   MIPS
   16916 
   16917      * Added support for the Broadcom SB-1A core.
   16918 
   16919   IA-64
   16920 
   16921      * Added support for IA-64 data and control speculation. By default
   16922        speculation is enabled only during second scheduler pass. A number
   16923        of machine flags was introduced to control the usage of speculation
   16924        for both scheduler passes.
   16925 
   16926   HPPA
   16927 
   16928      * Added Java language support (libffi and libjava) for 32-bit HP-UX
   16929        11 target.
   16930 
   16931 [7]Obsolete Systems
   16932 
   16933 Documentation improvements
   16934 
   16935   PDF Documentation
   16936 
   16937      * A make pdf target has been added to the top-level makefile,
   16938        enabling automated production of PDF documentation files.
   16939        (Front-ends external to GCC should modify their Make-lang.in file
   16940        to add a lang.pdf: target.)
   16941 
   16942 Other significant improvements
   16943 
   16944   Build system improvements
   16945 
   16946      * All the components of the compiler are now bootstrapped by default.
   16947        This improves the resilience to bugs in the system compiler or
   16948        binary compatibility problems, as well as providing better testing
   16949        of GCC 4.2 itself. In addition, if you build the compiler from a
   16950        combined tree, the assembler, linker, etc. will also be
   16951        bootstrapped (i.e. built with themselves).
   16952        You can disable this behavior, and go back to the pre-GCC 4.2 set
   16953        up, by configuring GCC with --disable-bootstrap.
   16954      * The rules that configure follows to find target tools resemble more
   16955        closely the locations that the built compiler will search. In
   16956        addition, you can use the new configure option --with-target-tools
   16957        to specify where to find the target tools used during the build,
   16958        without affecting what the built compiler will use.
   16959        This can be especially useful when building packages of GCC. For
   16960        example, you may want to build GCC with GNU as or ld, even if the
   16961        resulting compiler to work with the native assembler and linker. To
   16962        do so, you can use --with-target-tools to point to the native
   16963        tools.
   16964 
   16965   Incompatible changes to the build system
   16966 
   16967      * Front-ends external to GCC should modify their Make-lang.in file to
   16968        replace double-colon rules (e.g. dvi::) with normal rules (like
   16969        lang.dvi:). Front-end makefile hooks do not use double-colon rules
   16970        anymore.
   16971      * Up to GCC 4.1, a popular way to specify the target tools used
   16972        during the build was to create directories named gas, binutils,
   16973        etc. in the build tree, and create links to the tools from there.
   16974        This does not work any more when the compiler is bootstrapped. The
   16975        new configure option --with-target-tools provides a better way to
   16976        achieve the same effect, and works for all native and cross
   16977        settings.
   16978 
   16979 
   16980     For questions related to the use of GCC, please consult these web
   16981     pages and the [8]GCC manuals. If that fails, the
   16982     [9]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   16983     web pages and the development of GCC are welcome on our developer
   16984     list at [10]gcc (a] gcc.gnu.org. All of [11]our lists have public
   16985     archives.
   16986 
   16987    Copyright (C) [12]Free Software Foundation, Inc. Verbatim copying and
   16988    distribution of this entire article is permitted in any medium,
   16989    provided this notice is preserved.
   16990 
   16991    These pages are [13]maintained by the GCC team. Last modified
   16992    2025-01-31.
   16993 
   16994 References
   16995 
   16996    1. https://gcc.gnu.org/projects/gomp/
   16997    2. https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
   16998    3. https://gcc.gnu.org/onlinedocs/libstdc++/ext/pb_ds/index.html
   16999    4. https://gcc.gnu.org/onlinedocs/gfortran/Runtime-Options.html
   17000    5. https://gcc.gnu.org/wiki/Statically_linking_libgcj
   17001    6. https://gcc.gnu.org/gcc-4.2/changes.html#targets
   17002    7. https://gcc.gnu.org/gcc-4.2/changes.html#obsolete_systems
   17003    8. https://gcc.gnu.org/onlinedocs/
   17004    9. mailto:gcc-help (a] gcc.gnu.org
   17005   10. mailto:gcc (a] gcc.gnu.org
   17006   11. https://gcc.gnu.org/lists.html
   17007   12. https://www.fsf.org/
   17008   13. https://gcc.gnu.org/about.html
   17009 ======================================================================
   17010 http://gcc.gnu.org/gcc-4.1/index.html
   17011 
   17012                              GCC 4.1 Release Series
   17013 
   17014    (This release series is no longer supported.)
   17015 
   17016    February 13, 2007
   17017 
   17018    The [1]GNU project and the GCC developers are pleased to announce the
   17019    release of GCC 4.1.2.
   17020 
   17021    This release is a bug-fix release, containing fixes for regressions in
   17022    GCC 4.1.1 relative to previous releases of GCC.
   17023 
   17024 Release History
   17025 
   17026    GCC 4.1.2
   17027           February 13, 2007 ([2]changes)
   17028 
   17029    GCC 4.1.1
   17030           May 24, 2006 ([3]changes)
   17031 
   17032    GCC 4.1.0
   17033           February 28, 2006 ([4]changes)
   17034 
   17035 References and Acknowledgements
   17036 
   17037    GCC used to stand for the GNU C Compiler, but since the compiler
   17038    supports several other languages aside from C, it now stands for the
   17039    GNU Compiler Collection.
   17040 
   17041    A list of [5]successful builds is updated as new information becomes
   17042    available.
   17043 
   17044    The GCC developers would like to thank the numerous people that have
   17045    contributed new features, improvements, bug fixes, and other changes as
   17046    well as test results to GCC. This [6]amazing group of volunteers is
   17047    what makes GCC successful.
   17048 
   17049    For additional information about GCC please refer to the [7]GCC project
   17050    web site or contact the [8]GCC development mailing list.
   17051 
   17052    To obtain GCC please use [9]our mirror sites or [10]our version control
   17053    system.
   17054 
   17055 
   17056     For questions related to the use of GCC, please consult these web
   17057     pages and the [11]GCC manuals. If that fails, the
   17058     [12]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   17059     web pages and the development of GCC are welcome on our developer
   17060     list at [13]gcc (a] gcc.gnu.org. All of [14]our lists have public
   17061     archives.
   17062 
   17063    Copyright (C) [15]Free Software Foundation, Inc. Verbatim copying and
   17064    distribution of this entire article is permitted in any medium,
   17065    provided this notice is preserved.
   17066 
   17067    These pages are [16]maintained by the GCC team. Last modified
   17068    2022-10-26.
   17069 
   17070 References
   17071 
   17072    1. http://www.gnu.org/
   17073    2. https://gcc.gnu.org/gcc-4.1/changes.html#4.1.2
   17074    3. https://gcc.gnu.org/gcc-4.1/changes.html
   17075    4. https://gcc.gnu.org/gcc-4.1/changes.html
   17076    5. https://gcc.gnu.org/gcc-4.1/buildstat.html
   17077    6. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   17078    7. https://gcc.gnu.org/index.html
   17079    8. mailto:gcc (a] gcc.gnu.org
   17080    9. https://gcc.gnu.org/mirrors.html
   17081   10. https://gcc.gnu.org/git.html
   17082   11. https://gcc.gnu.org/onlinedocs/
   17083   12. mailto:gcc-help (a] gcc.gnu.org
   17084   13. mailto:gcc (a] gcc.gnu.org
   17085   14. https://gcc.gnu.org/lists.html
   17086   15. https://www.fsf.org/
   17087   16. https://gcc.gnu.org/about.html
   17088 ======================================================================
   17089 http://gcc.gnu.org/gcc-4.1/changes.html
   17090 
   17091                              GCC 4.1 Release Series
   17092                         Changes, New Features, and Fixes
   17093 
   17094    The latest release in the 4.1 release series is [1]GCC 4.1.2.
   17095 
   17096 Caveats
   17097 
   17098 General Optimizer Improvements
   17099 
   17100      * GCC now has infrastructure for inter-procedural optimizations and
   17101        the following inter-procedural optimizations are implemented:
   17102           + Profile guided inlining. When doing profile feedback guided
   17103             optimization, GCC can now use the profile to make better
   17104             informed decisions on whether inlining of a function is
   17105             profitable or not. This means that GCC will no longer inline
   17106             functions at call sites that are not executed very often, and
   17107             that functions at hot call sites are more likely to be
   17108             inlined.
   17109             A new parameter min-inline-recursive-probability is also now
   17110             available to throttle recursive inlining of functions with
   17111             small average recursive depths.
   17112           + Discovery of pure and const functions, a form of side-effects
   17113             analysis. While older GCC releases could also discover such
   17114             special functions, the new IPA-based pass runs earlier so that
   17115             the results are available to more optimizers. The pass is also
   17116             simply more powerful than the old one.
   17117           + Analysis of references to static variables and type escape
   17118             analysis, also forms of side-effects analysis. The results of
   17119             these passes allow the compiler to be less conservative about
   17120             call-clobbered variables and references. This results in more
   17121             redundant loads being eliminated and in making static
   17122             variables candidates for register promotion.
   17123           + Improvement of RTL-based alias analysis. The results of type
   17124             escape analysis are fed to the RTL type-based alias analyzer,
   17125             allowing it to disambiguate more memory references.
   17126           + Interprocedural constant propagation and function versioning.
   17127             This pass looks for functions that are always called with the
   17128             same constant value for one or more of the function arguments,
   17129             and propagates those constants into those functions.
   17130           + GCC will now eliminate static variables whose usage was
   17131             optimized out.
   17132           + -fwhole-program --combine can now be used to make all
   17133             functions in program static allowing whole program
   17134             optimization. As an exception, the main function and all
   17135             functions marked with the new externally_visible attribute are
   17136             kept global so that programs can link with runtime libraries.
   17137      * GCC can now do a form of partial dead code elimination (PDCE) that
   17138        allows code motion of expressions to the paths where the result of
   17139        the expression is actually needed. This is not always a win, so the
   17140        pass has been limited to only consider profitable cases. Here is an
   17141        example:
   17142     int foo (int *, int *);
   17143     int
   17144     bar (int d)
   17145     {
   17146       int a, b, c;
   17147       b = d + 1;
   17148       c = d + 2;
   17149       a = b + c;
   17150       if (d)
   17151         {
   17152           foo (&b, &c);
   17153           a = b + c;
   17154         }
   17155       printf ("%d\n", a);
   17156     }
   17157 
   17158        The a = b + c can be sunk to right before the printf. Normal code
   17159        sinking will not do this, it will sink the first one above into the
   17160        else-branch of the conditional jump, which still gives you two
   17161        copies of the code.
   17162      * GCC now has a value range propagation pass. This allows the
   17163        compiler to eliminate bounds checks and branches. The results of
   17164        the pass can also be used to accurately compute branch
   17165        probabilities.
   17166      * The pass to convert PHI nodes to straight-line code (a form of
   17167        if-conversion for GIMPLE) has been improved significantly. The two
   17168        most significant improvements are an improved algorithm to
   17169        determine the order in which the PHI nodes are considered, and an
   17170        improvement that allow the pass to consider if-conversions of basic
   17171        blocks with more than two predecessors.
   17172      * Alias analysis improvements. GCC can now differentiate between
   17173        different fields of structures in Tree-SSA's virtual operands form.
   17174        This lets stores/loads from non-overlapping structure fields not
   17175        conflict. A new algorithm to compute points-to sets was contributed
   17176        that can allows GCC to see now that p->a and p->b, where p is a
   17177        pointer to a structure, can never point to the same field.
   17178      * Various enhancements to auto-vectorization:
   17179           + Incrementally preserve SSA form when vectorizing.
   17180           + Incrementally preserve loop-closed form when vectorizing.
   17181           + Improvements to peeling for alignment: generate better code
   17182             when the misalignment of an access is known at compile time,
   17183             or when different accesses are known to have the same
   17184             misalignment, even if the misalignment amount itself is
   17185             unknown.
   17186           + Consider dependence distance in the vectorizer.
   17187           + Externalize generic parts of data reference analysis to make
   17188             this analysis available to other passes.
   17189           + Vectorization of conditional code.
   17190           + Reduction support.
   17191      * GCC can now partition functions in sections of hot and cold code.
   17192        This can significantly improve performance due to better
   17193        instruction cache locality. This feature works best together with
   17194        profile feedback driven optimization.
   17195      * A new pass to avoid saving of unneeded arguments to the stack in
   17196        vararg functions if the compiler can prove that they will not be
   17197        needed.
   17198      * Transition of basic block profiling to tree level implementation
   17199        has been completed. The new implementation should be considerably
   17200        more reliable (hopefully avoiding profile mismatch errors when
   17201        using -fprofile-use or -fbranch-probabilities) and can be used to
   17202        drive higher level optimizations, such as inlining.
   17203        The -ftree-based-profiling command-line option was removed and
   17204        -fprofile-use now implies disabling old RTL level loop optimizer
   17205        (-fno-loop-optimize). Speculative prefetching optimization
   17206        (originally enabled by -fspeculative-prefetching) was removed.
   17207 
   17208 New Languages and Language specific improvements
   17209 
   17210   C and Objective-C
   17211 
   17212      * The old Bison-based C and Objective-C parser has been replaced by a
   17213        new, faster hand-written recursive-descent parser.
   17214 
   17215   Ada
   17216 
   17217      * The build infrastructure for the Ada runtime library and tools has
   17218        been changed to be better integrated with the rest of the build
   17219        infrastructure of GCC. This should make doing cross builds of Ada a
   17220        bit easier.
   17221 
   17222   [2]C++
   17223 
   17224      * ARM-style name-injection of friend declarations is no longer the
   17225        default. For example:
   17226           struct S {
   17227             friend void f();
   17228           };
   17229 
   17230           void g() { f(); }
   17231        will not be accepted; instead a declaration of f will need to be
   17232        present outside of the scope of S. The new -ffriend-injection
   17233        option will enable the old behavior.
   17234      * The (undocumented) extension which permitted templates with default
   17235        arguments to be bound to template template parameters with fewer
   17236        parameters has been deprecated, and will be removed in the next
   17237        major release of G++. For example:
   17238        template <template <typename> class C>
   17239        void f(C<double>) {}
   17240 
   17241        template <typename T, typename U = int>
   17242        struct S {};
   17243 
   17244        template void f(S<double>);
   17245 
   17246        makes use of the deprecated extension. The reason this code is not
   17247        valid ISO C++ is that S is a template with two parameters;
   17248        therefore, it cannot be bound to C which has only one parameter.
   17249 
   17250     Runtime Library (libstdc++)
   17251 
   17252      * Optimization work:
   17253           + A new implementation of std::search_n is provided, better
   17254             performing in case of random access iterators.
   17255           + Added further efficient specializations of istream functions,
   17256             i.e., character array and string extractors.
   17257           + Other smaller improvements throughout.
   17258      * Policy-based associative containers, designed for high-performance,
   17259        flexibility and semantic safety are delivered in ext/pb_assoc.
   17260      * A versatile string class, __gnu_cxx::__versa_string, providing
   17261        facilities conforming to the standard requirements for
   17262        basic_string, is delivered in <ext/vstring.h>. In particular:
   17263           + Two base classes are provided: the default one avoids
   17264             reference counting and is optimized for short strings; the
   17265             alternate one, still uses it while improving in a few low
   17266             level areas (e.g., alignment). See vstring_fwd.h for some
   17267             useful typedefs.
   17268           + Various algorithms have been rewritten (e.g., replace), the
   17269             code streamlined and simple optimizations added.
   17270           + Option 3 of DR 431 is implemented for both available bases,
   17271             thus improving the support for stateful allocators.
   17272      * As usual, many bugs have been fixed (e.g., libstdc++/13583,
   17273        libstdc++/23953) and LWG resolutions put into effect for the first
   17274        time (e.g., DR 280, DR 464, N1780 recommendations for DR 233, TR1
   17275        Issue 6.19). The implementation status of TR1 is now tracked in the
   17276        docs in tr1.html.
   17277 
   17278   Objective-C++
   17279 
   17280      * A new language front end for Objective-C++ has been added. This
   17281        language allows users to mix the object oriented features of
   17282        Objective-C with those of C++.
   17283 
   17284   Java (GCJ)
   17285 
   17286      * Core library (libgcj) updates based on GNU Classpath 0.15 - 0.19
   17287        features (plus some 0.20 bug-fixes)
   17288           + Networking
   17289                o The java.net.HttpURLConnection implementation no longer
   17290                  buffers the entire response body in memory. This means
   17291                  that response bodies larger than available memory can now
   17292                  be handled.
   17293           + (N)IO
   17294                o NIO FileChannel.map implementation, fast bulk put
   17295                  implementation for DirectByteBuffer (speeds up this
   17296                  method 10x).
   17297                o FileChannel.lock() and FileChannel.force() implemented.
   17298           + XML
   17299                o gnu.xml fix for nodes created outside a namespace
   17300                  context.
   17301                o Add support for output indenting and
   17302                  cdata-section-elements output instruction in
   17303                  xml.transform.
   17304                o xml.xpath corrections for cases where elements/attributes
   17305                  might have been created in non-namespace-aware mode.
   17306                  Corrections to handling of XSL variables and minor
   17307                  conformance updates.
   17308           + AWT
   17309                o GNU JAWT implementation, the AWT Native Interface, which
   17310                  allows direct access to native screen resources from
   17311                  within a Canvas's paint method. GNU Classpath Examples
   17312                  comes with a Demo, see libjava/classpath/examples/README.
   17313                o awt.datatransfer updated to 1.5 with support for
   17314                  FlavorEvents. The gtk+ awt peers now allow copy/paste of
   17315                  text, images, URIs/files and serialized objects with
   17316                  other applications and tracking clipboard change events
   17317                  with gtk+ 2.6 (for gtk+ 2.4 only text and serialized
   17318                  objects are supported). A GNU Classpath Examples
   17319                  datatransfer Demo was added to show the new
   17320                  functionality.
   17321                o Split gtk+ awt peers event handling in two threads and
   17322                  improve gdk lock handling (solves several awt lock ups).
   17323                o Speed up awt Image loading.
   17324                o Better gtk+ scrollbar peer implementation when using gtk+
   17325                  >= 2.6.
   17326                o Handle image loading errors correctly for gdkpixbuf and
   17327                  MediaTracker.
   17328                o Better handle GDK lock. Properly prefix gtkpeer native
   17329                  functions (cp_gtk).
   17330                o GdkGraphics2D has been updated to use Cairo 0.5.x or
   17331                  higher.
   17332                o BufferedImage and GtkImage rewrites. All image drawing
   17333                  operations should now work correctly (flipping requires
   17334                  gtk+ >= 2.6)
   17335                o When gtk+ 2.6 or higher is installed the default log
   17336                  handler will produce stack traces whenever a WARNING,
   17337                  CRITICAL or ERROR message is produced.
   17338           + Free Swing
   17339                o The RepaintManager has been reworked for more efficient
   17340                  painting, especially for large GUIs.
   17341                o The layout manager OverlayLayout has been implemented,
   17342                  the BoxLayout has been rewritten to make use of the
   17343                  SizeRequirements utility class and caching for more
   17344                  efficient layout.
   17345                o Improved accessibility support.
   17346                o Significant progress has been made in the implementation
   17347                  of the javax.swing.plaf.metal package, with most UI
   17348                  delegates in a working state now. Please test this with
   17349                  your own applications and provide feedback that will help
   17350                  us to improve this package.
   17351                o The GUI demo (gnu.classpath.examples.swing.Demo) has been
   17352                  extended to highlight various features in our Free Swing
   17353                  implementation. And it includes a look and feel switcher
   17354                  for Metal (default), Ocean and GNU themes.
   17355                o The javax.swing.plaf.multi package is now implemented.
   17356                o Editing and several key actions for JTree and JTable were
   17357                  implemented.
   17358                o Lots of icons and look and feel improvements for Free
   17359                  Swing basic and metal themes were added. Try running the
   17360                  GNU Classpath Swing Demo in examples
   17361                  (gnu.classpath.examples.swing.Demo) with:
   17362                  -Dswing.defaultlaf=javax.swing.plaf.basic.BasicLookAndFee
   17363                  l or
   17364                  -Dswing.defaultlaf=javax.swing.plaf.metal.MetalLookAndFee
   17365                  l
   17366                o Start of styled text capabilites for java.swing.text.
   17367                o DefaultMutableTreeNode pre-order, post-order, depth-first
   17368                  and breadth-first traversal enumerations implemented.
   17369                o JInternalFrame colors and titlebar draw properly.
   17370                o JTree is working up to par (icons, selection and keyboard
   17371                  traversal).
   17372                o JMenus were made more compatible in visual and
   17373                  programmatic behavior.
   17374                o JTable changeSelection and multiple selections
   17375                  implemented.
   17376                o JButton and JToggleButton change states work properly
   17377                  now.
   17378                o JFileChooser fixes.
   17379                o revalidate() and repaint() fixes which make Free Swing
   17380                  much more responsive.
   17381                o MetalIconFactory implemented.
   17382                o Free Swing Top-Level Compatibility. JFrame, JDialog,
   17383                  JApplet, JInternalFrame, and JWindow are now 1.5
   17384                  compatible in the sense that you can call add() and
   17385                  setLayout() directly on them, which will have the same
   17386                  effect as calling getContentPane().add() and
   17387                  getContentPane().setLayout().
   17388                o The JTree interface has been completed. JTrees now
   17389                  recognizes mouse clicks and selections work.
   17390                o BoxLayout works properly now.
   17391                o Fixed GrayFilter to actually work.
   17392                o Metal SplitPane implemented.
   17393                o Lots of Free Swing text and editor stuff work now.
   17394           + Free RMI and Corba
   17395                o Andrew Watson, Vice President and Technical Director of
   17396                  the Object Management Group, has officially assigned us
   17397                  20 bit Vendor Minor Code Id: 0x47430 ("GC") that will
   17398                  mark remote classpath-specific system exceptions.
   17399                  Obtaining the VMCID means that GNU Classpath now is a
   17400                  recogniseable type of node in a highly interoperable
   17401                  CORBA world.
   17402                o GNU Classpath now includes the first working draft to
   17403                  support the RMI over IIOP protocol. The current
   17404                  implementation is capable of remote invocations,
   17405                  transferring various Serializables and Externalizables
   17406                  via RMI-IIOP protocol. It can flatten graphs and, at
   17407                  least for the simple cases, is interoperable with 1.5
   17408                  JDKs.
   17409                o org.omg.PortableInterceptor and related functionality in
   17410                  other packages is now implemented:
   17411                     # The sever and client interceptors work as required
   17412                       since 1.4.
   17413                     # The IOR interceptor works as needed for 1.5.
   17414                o The org.omg.DynamicAny package is completed and passes
   17415                  the prepared tests.
   17416                o The Portable Object Adapter should now support the output
   17417                  of the recent IDL to java compilers. These compilers now
   17418                  generate servants and not CORBA objects as before, making
   17419                  the output depend on the existing POA implementation.
   17420                  Completing POA means that such code can already be tried
   17421                  to run on Classpath. Our POA is tested for the following
   17422                  usager scenarios:
   17423                     # POA converts servant to the CORBA object.
   17424                     # Servant provides to the CORBA object.
   17425                     # POA activates new CORBA object with the given Object
   17426                       Id (byte array) that is later accessible for the
   17427                       servant.
   17428                     # During the first call, the ServantActivator provides
   17429                       servant for this and all subsequent calls on the
   17430                       current object.
   17431                     # During each call, the ServantLocator provides
   17432                       servant for this call only.
   17433                     # ServantLocator or ServantActivator forwards call to
   17434                       another server.
   17435                     # POA has a single servant, responsible for all
   17436                       objects.
   17437                     # POA has a default servant, but some objects are
   17438                       explicitly connected to they specific servants.
   17439                  The POA is verified using tests from the former
   17440                  cost.omg.org.
   17441                o The CORBA implementation is now a working prototype that
   17442                  should support features up to 1.3 inclusive. We invite
   17443                  groups writing CORBA dependent applications to try
   17444                  Classpath implementation, reporting any possible bugs.
   17445                  The CORBA prototype is interoperable with Sun's
   17446                  implementation v 1.4, transferring object references,
   17447                  primitive types, narrow and wide strings, arrays,
   17448                  structures, trees, abstract interfaces and value types
   17449                  (feature of CORBA 2.3) between these two platforms.
   17450                  Remote exceptions are transferred and handled correctly.
   17451                  The stringified object references (IORs) from various
   17452                  sources are parsed as required. The transient (for
   17453                  current session) and permanent (till jre restart)
   17454                  redirections work. Both Little and Big Endian encoded
   17455                  messages are accepted. The implementation is verified
   17456                  using tests from the former cost.omg.org. The current
   17457                  release includes working examples (see the examples
   17458                  directory), demonstrating the client-server
   17459                  communication, using either CORBA Request or IDL-based
   17460                  stub (usually generated by a IDL to java compiler). These
   17461                  examples also show how to use the Classpath CORBA naming
   17462                  service. The IDL to java compiler is not yet written, but
   17463                  as our library must be compatible, it naturally accepts
   17464                  the output of other idlj implementations.
   17465           + Misc
   17466                o Updated TimeZone data against Olson tzdata2005l.
   17467                o Make zip and jar packages UTF-8 clean.
   17468                o "native" code builds and compiles (warning free) on
   17469                  Darwin and Solaris.
   17470                o java.util.logging.FileHandler now rotates files.
   17471                o Start of a generic JDWP framework in gnu/classpath/jdwp.
   17472                  This is unfinished, but feedback (at classpath (a] gnu.org)
   17473                  from runtime hackers is greatly appreciated. Although
   17474                  most of the work is currently being done around gcj/gij
   17475                  we want this framework to be as VM neutral as possible.
   17476                  Early design is described in:
   17477                  [3]https://gcc.gnu.org/ml/java/2005-05/msg00260.html
   17478                o QT4 AWT peers, enable by giving configure
   17479                  --enable-qt-peer. Included, but not ready for production
   17480                  yet. They are explicitly disabled and not supported. But
   17481                  if you want to help with the development of these new
   17482                  features we are interested in feedback. You will have to
   17483                  explicitly enable them to try them out (and they will
   17484                  most likely contain bugs).
   17485                o Documentation fixes all over the place. See
   17486                  [4]https://developer.classpath.org/doc/
   17487 
   17488 [5]New Targets and Target Specific Improvements
   17489 
   17490   IA-32/x86-64
   17491 
   17492      * The x86-64 medium model (that allows building applications whose
   17493        data segment exceeds 4GB) was redesigned to match latest ABI draft.
   17494        New implementation split large datastructures into separate segment
   17495        improving performance of accesses to small datastructures and also
   17496        allows linking of small model libraries into medium model programs
   17497        as long as the libraries are not accessing the large datastructures
   17498        directly. Medium model is also supported in position independent
   17499        code now.
   17500        The ABI change results in partial incompatibility among medium
   17501        model objects. Linking medium model libraries (or objects) compiled
   17502        with new compiler into medium model program compiled with older
   17503        will likely result in exceeding ranges of relocations.
   17504        Binutils 2.16.91 or newer are required for compiling medium model
   17505        now.
   17506 
   17507   RS6000 (POWER/PowerPC)
   17508 
   17509      * The AltiVec vector primitives in <altivec.h> are now implemented in
   17510        a way that puts a smaller burden on the preprocessor, instead
   17511        processing the "overloading" in the front ends. This should benefit
   17512        compilation speed on AltiVec vector code.
   17513      * AltiVec initializers now are generated more efficiently.
   17514      * The popcountb instruction available on POWER5 now is generated.
   17515      * The floating point round to integer instructions available on
   17516        POWER5+ now is generated.
   17517      * Floating point divides can be synthesized using the floating point
   17518        reciprocal estimate instructions.
   17519      * Double precision floating point constants are initialized as single
   17520        precision values if they can be represented exactly.
   17521 
   17522   S/390, zSeries and System z9
   17523 
   17524      * Support for the IBM System z9 109 processor has been added. When
   17525        using the -march=z9-109 option, the compiler will generate code
   17526        making use of instructions provided by the extended immediate
   17527        facility.
   17528      * Support for 128-bit IEEE floating point has been added. When using
   17529        the -mlong-double-128 option, the compiler will map the long double
   17530        data type to 128-bit IEEE floating point. Using this option
   17531        constitutes an ABI change, and requires glibc support.
   17532      * Various changes to improve performance of generated code have been
   17533        implemented, including:
   17534           + In functions that do not require a literal pool, register %r13
   17535             (which is traditionally reserved as literal pool pointer), can
   17536             now be freely used for other purposes by the compiler.
   17537           + More precise tracking of register use allows the compiler to
   17538             generate more efficient function prolog and epilog code in
   17539             certain cases.
   17540           + The SEARCH STRING, COMPARE LOGICAL STRING, and MOVE STRING
   17541             instructions are now used to implement C string functions.
   17542           + The MOVE CHARACTER instruction with single byte overlap is now
   17543             used to implement the memset function with non-zero fill byte.
   17544           + The LOAD ZERO instructions are now used where appropriate.
   17545           + The INSERT CHARACTERS UNDER MASK, STORE CHARACTERS UNDER MASK,
   17546             and INSERT IMMEDIATE instructions are now used more frequently
   17547             to optimize bitfield operations.
   17548           + The BRANCH ON COUNT instruction is now used more frequently.
   17549             In particular, the fact that a loop contains a subroutine call
   17550             no longer prevents the compiler from using this instruction.
   17551           + The compiler is now aware that all shift and rotate
   17552             instructions implicitly truncate the shift count to six bits.
   17553      * Back-end support for the following generic features has been
   17554        implemented:
   17555           + The full set of [6]built-in functions for atomic memory
   17556             access.
   17557           + The -fstack-protector feature.
   17558           + The optimization pass avoiding unnecessary stores of incoming
   17559             argument registers in functions with variable argument list.
   17560 
   17561   SPARC
   17562 
   17563      * The default code model in 64-bit mode has been changed from
   17564        Medium/Anywhere to Medium/Middle on Solaris.
   17565      * TLS support is disabled by default on Solaris prior to release 10.
   17566        It can be enabled on TLS-capable Solaris 9 versions (4/04 release
   17567        and later) by specifying --enable-tls at configure time.
   17568 
   17569   MorphoSys
   17570 
   17571      * Support has been added for this new architecture.
   17572 
   17573 [7]Obsolete Systems
   17574 
   17575 Documentation improvements
   17576 
   17577 Other significant improvements
   17578 
   17579      * GCC can now emit code for protecting applications from
   17580        stack-smashing attacks. The protection is realized by buffer
   17581        overflow detection and reordering of stack variables to avoid
   17582        pointer corruption.
   17583      * Some built-in functions have been fortified to protect them against
   17584        various buffer overflow (and format string) vulnerabilities.
   17585        Compared to the mudflap bounds checking feature, the safe builtins
   17586        have far smaller overhead. This means that programs built using
   17587        safe builtins should not experience any measurable slowdown.
   17588 
   17589 [8]GCC 4.1.2
   17590 
   17591    This is the [9]list of problem reports (PRs) from GCC's bug tracking
   17592    system that are known to be fixed in the 4.1.2 release. This list might
   17593    not be complete (that is, it is possible that some PRs that have been
   17594    fixed are not listed here).
   17595 
   17596    When generating code for a shared library, GCC now recognizes that
   17597    global functions may be replaced when the program runs. Therefore, it
   17598    is now more conservative in deducing information from the bodies of
   17599    functions. For example, in this example:
   17600     void f() {}
   17601     void g() {
   17602      try { f(); }
   17603      catch (...) {
   17604        cout << "Exception";
   17605      }
   17606     }
   17607 
   17608    G++ would previously have optimized away the catch clause, since it
   17609    would have concluded that f cannot throw exceptions. Because users may
   17610    replace f with another function in the main body of the program, this
   17611    optimization is unsafe, and is no longer performed. If you wish G++ to
   17612    continue to optimize as before, you must add a throw() clause to the
   17613    declaration of f to make clear that it does not throw exceptions.
   17614 
   17615 
   17616     For questions related to the use of GCC, please consult these web
   17617     pages and the [10]GCC manuals. If that fails, the
   17618     [11]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   17619     web pages and the development of GCC are welcome on our developer
   17620     list at [12]gcc (a] gcc.gnu.org. All of [13]our lists have public
   17621     archives.
   17622 
   17623    Copyright (C) [14]Free Software Foundation, Inc. Verbatim copying and
   17624    distribution of this entire article is permitted in any medium,
   17625    provided this notice is preserved.
   17626 
   17627    These pages are [15]maintained by the GCC team. Last modified
   17628    2025-01-31.
   17629 
   17630 References
   17631 
   17632    1. https://gcc.gnu.org/gcc-4.1/changes.html#4.1.2
   17633    2. https://gcc.gnu.org/gcc-4.1/changes.html#cplusplus
   17634    3. https://gcc.gnu.org/ml/java/2005-05/msg00260.html
   17635    4. https://developer.classpath.org/doc/
   17636    5. https://gcc.gnu.org/gcc-4.1/changes.html#targets
   17637    6. https://gcc.gnu.org/onlinedocs/gcc-4.1.0/gcc/Atomic-Builtins.html
   17638    7. https://gcc.gnu.org/gcc-4.1/changes.html#obsolete_systems
   17639    8. https://gcc.gnu.org/gcc-4.1/changes.html#GCC4.1.2
   17640    9. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.1.2
   17641   10. https://gcc.gnu.org/onlinedocs/
   17642   11. mailto:gcc-help (a] gcc.gnu.org
   17643   12. mailto:gcc (a] gcc.gnu.org
   17644   13. https://gcc.gnu.org/lists.html
   17645   14. https://www.fsf.org/
   17646   15. https://gcc.gnu.org/about.html
   17647 ======================================================================
   17648 http://gcc.gnu.org/gcc-4.0/index.html
   17649 
   17650                              GCC 4.0 Release Series
   17651 
   17652    (This release series is no longer supported.)
   17653 
   17654    January 31, 2007
   17655 
   17656    The [1]GNU project and the GCC developers are pleased to announce the
   17657    release of GCC 4.0.4.
   17658 
   17659    This release is a bug-fix release, containing fixes for regressions in
   17660    GCC 4.0.3 relative to previous releases of GCC.
   17661 
   17662 Release History
   17663 
   17664    GCC 4.0.4
   17665           January 31, 2007 ([2]changes)
   17666 
   17667    GCC 4.0.3
   17668           March 10, 2006 ([3]changes)
   17669 
   17670    GCC 4.0.2
   17671           September 28, 2005 ([4]changes)
   17672 
   17673    GCC 4.0.1
   17674           July 7, 2005 ([5]changes)
   17675 
   17676    GCC 4.0.0
   17677           April 20, 2005 ([6]changes)
   17678 
   17679 References and Acknowledgements
   17680 
   17681    GCC used to stand for the GNU C Compiler, but since the compiler
   17682    supports several other languages aside from C, it now stands for the
   17683    GNU Compiler Collection.
   17684 
   17685    A list of [7]successful builds is updated as new information becomes
   17686    available.
   17687 
   17688    The GCC developers would like to thank the numerous people that have
   17689    contributed new features, improvements, bug fixes, and other changes as
   17690    well as test results to GCC. This [8]amazing group of volunteers is
   17691    what makes GCC successful.
   17692 
   17693    For additional information about GCC please refer to the [9]GCC project
   17694    web site or contact the [10]GCC development mailing list.
   17695 
   17696    To obtain GCC please use [11]our mirror sites, or [12]our version
   17697    control system.
   17698 
   17699 
   17700     For questions related to the use of GCC, please consult these web
   17701     pages and the [13]GCC manuals. If that fails, the
   17702     [14]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   17703     web pages and the development of GCC are welcome on our developer
   17704     list at [15]gcc (a] gcc.gnu.org. All of [16]our lists have public
   17705     archives.
   17706 
   17707    Copyright (C) [17]Free Software Foundation, Inc. Verbatim copying and
   17708    distribution of this entire article is permitted in any medium,
   17709    provided this notice is preserved.
   17710 
   17711    These pages are [18]maintained by the GCC team. Last modified
   17712    2022-10-26.
   17713 
   17714 References
   17715 
   17716    1. http://www.gnu.org/
   17717    2. https://gcc.gnu.org/gcc-4.0/changes.html#4.0.4
   17718    3. https://gcc.gnu.org/gcc-4.0/changes.html#4.0.3
   17719    4. https://gcc.gnu.org/gcc-4.0/changes.html#4.0.2
   17720    5. https://gcc.gnu.org/gcc-4.0/changes.html#4.0.1
   17721    6. https://gcc.gnu.org/gcc-4.0/changes.html
   17722    7. https://gcc.gnu.org/gcc-4.0/buildstat.html
   17723    8. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   17724    9. https://gcc.gnu.org/index.html
   17725   10. mailto:gcc (a] gcc.gnu.org
   17726   11. https://gcc.gnu.org/mirrors.html
   17727   12. https://gcc.gnu.org/git.html
   17728   13. https://gcc.gnu.org/onlinedocs/
   17729   14. mailto:gcc-help (a] gcc.gnu.org
   17730   15. mailto:gcc (a] gcc.gnu.org
   17731   16. https://gcc.gnu.org/lists.html
   17732   17. https://www.fsf.org/
   17733   18. https://gcc.gnu.org/about.html
   17734 ======================================================================
   17735 http://gcc.gnu.org/gcc-4.0/changes.html
   17736 
   17737                              GCC 4.0 Release Series
   17738                         Changes, New Features, and Fixes
   17739 
   17740    The latest release in the 4.0 release series is [1]GCC 4.0.4.
   17741 
   17742 Caveats
   17743 
   17744      * GCC now generates location lists by default when compiling with
   17745        debug info and optimization.
   17746           + GDB 6.0 and older crashes when it sees location lists. GDB 6.1
   17747             or later is needed to debug binaries containing location
   17748             lists.
   17749           + When you are trying to view a value of a variable in a part of
   17750             a function where it has no location (for example when the
   17751             variable is no longer used and thus its location was used for
   17752             something else) GDB will say that it is not available.
   17753        You can disable generating location lists by -fno-var-tracking.
   17754      * GCC no longer accepts the -fwritable-strings option. Use named
   17755        character arrays when you need a writable string.
   17756      * The options -freduce-all-givs and -fmove-all-movables have been
   17757        discontinued. They were used to circumvent a shortcoming in the
   17758        heuristics of the old loop optimization code with respect to common
   17759        Fortran constructs. The new (tree) loop optimizer works differently
   17760        and doesn't need those work-arounds.
   17761      * The graph-coloring register allocator, formerly enabled by the
   17762        option -fnew-ra, has been discontinued.
   17763      * -I- has been deprecated. -iquote is meant to replace the need for
   17764        this option.
   17765      * The MIPS -membedded-pic and -mrnames options have been removed.
   17766      * All MIPS targets now require the GNU assembler. In particular, IRIX
   17767        configurations can no longer use the MIPSpro assemblers, although
   17768        they do still support the MIPSpro linkers.
   17769      * The SPARC option -mflat has been removed.
   17770      * English-language diagnostic messages will now use Unicode quotation
   17771        marks in UTF-8 locales. (Non-English messages already used the
   17772        quotes appropriate for the language in previous releases.) If your
   17773        terminal does not support UTF-8 but you are using a UTF-8 locale
   17774        (such locales are the default on many GNU/Linux systems) then you
   17775        should set LC_CTYPE=C in the environment to disable that locale.
   17776        Programs that parse diagnostics and expect plain ASCII
   17777        English-language messages should set LC_ALL=C. See [2]Markus Kuhn's
   17778        explanation of Unicode quotation marks for more information.
   17779      * The specs file is no longer installed on most platforms. Most users
   17780        will be totally unaffected. However, if you are accustomed to
   17781        editing the specs file yourself, you will now have to use the
   17782        -dumpspecs option to generate the specs file, and then edit the
   17783        resulting file.
   17784 
   17785 General Optimizer Improvements
   17786 
   17787      * The [3]tree ssa branch has been merged. This merge has brought in a
   17788        completely new optimization framework based on a higher level
   17789        intermediate representation than the existing RTL representation.
   17790        Numerous new code transformations based on the new framework are
   17791        available in GCC 4.0, including:
   17792           + Scalar replacement of aggregates
   17793           + Constant propagation
   17794           + Value range propagation
   17795           + Partial redundancy elimination
   17796           + Load and store motion
   17797           + Strength reduction
   17798           + Dead store elimination
   17799           + Dead and unreachable code elimination
   17800           + [4]Autovectorization
   17801           + Loop interchange
   17802           + Tail recursion by accumulation
   17803        Many of these passes outperform their counterparts from previous
   17804        GCC releases.
   17805      * [5]Swing Modulo Scheduling (SMS). An RTL level instruction
   17806        scheduling optimization intended for loops that perform heavy
   17807        computations.
   17808 
   17809 New Languages and Language specific improvements
   17810 
   17811   C family
   17812 
   17813      * The sentinel attribute has been added to GCC. This function
   17814        attribute allows GCC to warn when variadic functions such as execl
   17815        are not NULL terminated. See the GCC manual for a complete
   17816        description of its behavior.
   17817      * Given __attribute__((alias("target"))) it is now an error if target
   17818        is not a symbol, defined in the same translation unit. This also
   17819        applies to aliases created by #pragma weak alias=target. This is
   17820        because it's meaningless to define an alias to an undefined symbol.
   17821        On Solaris, the native assembler would have caught this error, but
   17822        GNU as does not.
   17823 
   17824   C and Objective-C
   17825 
   17826      * The -Wstrict-aliasing=2 option has been added. This warning catches
   17827        all unsafe cases, but it may also give a warning for some cases
   17828        that are safe.
   17829      * The cast-as-lvalue, conditional-expression-as-lvalue and
   17830        compound-expression-as-lvalue extensions, which were deprecated in
   17831        3.3.4 and 3.4, have been removed.
   17832      * The -fwritable-strings option, which was deprecated in 3.4, has
   17833        been removed.
   17834      * #pragma pack() semantics have been brought closer to those used by
   17835        other compilers. This also applies to C++.
   17836      * Taking the address of a variable with register storage is invalid
   17837        in C. GCC now issues an error instead of a warning.
   17838      * Arrays of incomplete element type are invalid in C. GCC now issues
   17839        an error for such arrays. Declarations such as extern struct s x[];
   17840        (where struct s has not been defined) can be moved after the
   17841        definition of struct s. Function parameters declared as arrays of
   17842        incomplete type can instead be declared as pointers.
   17843 
   17844   C++
   17845 
   17846      * When compiling without optimizations (-O0), the C++ front end is
   17847        much faster than in any previous versions of GCC. Independent
   17848        testers have measured speed-ups up to 25% in real-world production
   17849        code, compared to the 3.4 family (which was already the fastest
   17850        version to date). Upgrading from older versions might show even
   17851        bigger improvements.
   17852      * ELF visibility attributes can now be applied to a class type, so
   17853        that it affects every member function of a class at once, without
   17854        having to specify each individually:
   17855 class __attribute__ ((visibility("hidden"))) Foo
   17856 {
   17857    int foo1();
   17858    void foo2();
   17859 };
   17860        The syntax is deliberately similar to the __declspec() system used
   17861        by Microsoft Windows based compilers, allowing cross-platform
   17862        projects to easily reuse their existing macro system for denoting
   17863        exports and imports. By explicitly marking internal classes never
   17864        used outside a binary as hidden, one can completely avoid PLT
   17865        indirection overheads during their usage by the compiler. You can
   17866        find out more about the advantages of this at
   17867        [6]https://www.akkadia.org/drepper/dsohowto.pdf
   17868      * The -fvisibility-inlines-hidden option has been added which marks
   17869        all inlineable functions as having hidden ELF visibility, thus
   17870        removing their symbol and typeinfo from the exported symbol table
   17871        of the output ELF binary. Using this option can reduce the exported
   17872        symbol count of template-heavy code by up to 40% with no code
   17873        change at all, thus notably improving link and load times for the
   17874        binary as well as a reduction in size of up to 10%. Also, check the
   17875        new [7]-fvisibility option.
   17876      * The compiler now uses the library interface specified by the [8]C++
   17877        ABI for thread-safe initialization of function-scope static
   17878        variables. Most users should leave this alone, but embedded
   17879        programmers may want to disable this by specifying
   17880        -fno-threadsafe-statics for a small savings in code size.
   17881      * Taking the address of an explicit register variable is no longer
   17882        supported. Note that C++ allows taking the address of variables
   17883        with register storage so this will continue to compile with a
   17884        warning. For example, assuming that r0 is a machine register:
   17885 register int foo asm ("r0");
   17886 register int bar;
   17887 &foo; // error, no longer accepted
   17888 &bar; // OK, with a warning
   17889      * G++ has an undocumented extension to virtual function covariancy
   17890        rules that allowed the overrider to return a type that was
   17891        implicitly convertable to the overridden function's return type.
   17892        For instance a function returning void * could be overridden by a
   17893        function returning T *. This is now deprecated and will be removed
   17894        in a future release.
   17895      * The G++ minimum and maximum operators (<? and >?) and their
   17896        compound forms (<?=) and >?=) have been deprecated and will be
   17897        removed in a future version. Code using these operators should be
   17898        modified to use std::min and std::max instead.
   17899      * Declaration of nested classes of class templates as friends are
   17900        supported:
   17901 template <typename T> struct A {
   17902   class B {};
   17903 };
   17904 class C {
   17905   template <typename T> friend class A<T>::B;
   17906 };
   17907        This complements the feature member functions of class templates as
   17908        friends introduced in GCC 3.4.0.
   17909      * When declaring a friend class using an unqualified name, classes
   17910        outside the innermost non-class scope are not searched:
   17911 class A;
   17912 namespace N {
   17913   class B {
   17914     friend class A;   // Refer to N::A which has not been declared yet
   17915                       // because name outside namespace N are not searched
   17916     friend class ::A; // Refer to ::A
   17917   };
   17918 }
   17919        Hiding the friend name until declaration is still not implemented.
   17920      * Friends of classes defined outside their namespace are correctly
   17921        handled:
   17922 namespace N {
   17923   class A;
   17924 }
   17925 class N::A {
   17926   friend class B; // Refer to N::B in GCC 4.0.0
   17927                   // but ::B in earlier versions of GCC
   17928 };
   17929 
   17930     Runtime Library (libstdc++)
   17931 
   17932      * Optimization work:
   17933           + Added efficient specializations of istream functions for char
   17934             and wchar_t.
   17935           + Further performance tuning of strings, in particular wrt
   17936             single-char append and getline.
   17937           + iter_swap - and therefore most of the mutating algorithms -
   17938             now makes an unqualified call to swap when the value_type of
   17939             the two iterators is the same.
   17940      * A large subset of the features in Technical Report 1 (TR1 for
   17941        short) is experimentally delivered (i.e., no guarantees about the
   17942        implementation are provided. In particular it is not promised that
   17943        the library will remain link-compatible when code using TR1 is
   17944        used):
   17945           + General utilities such as reference_wrapper and shared_ptr.
   17946           + Function objects, i.e., result_of, mem_fn, bind, function.
   17947           + Support for metaprogramming.
   17948           + New containers such as tuple, array, unordered_set,
   17949             unordered_map, unordered_multiset, unordered_multimap.
   17950      * As usual, many bugs have been fixed and LWG resolutions implemented
   17951        for the first time (e.g., DR 409).
   17952 
   17953   Java
   17954 
   17955      * In order to prevent naming conflicts with other implementations of
   17956        these tools, some GCJ binaries have been renamed:
   17957           + rmic is now grmic,
   17958           + rmiregistry is now grmiregistry, and
   17959           + jar is now fastjar.
   17960        In particular, these names were problematic for the jpackage.org
   17961        packaging conventions which install symlinks in /usr/bin that point
   17962        to the preferred versions of these tools.
   17963      * The -findirect-dispatch argument to the compiler now works and
   17964        generates code following a new "binary compatibility" ABI. Code
   17965        compiled this way follows the binary compatibility rules of the
   17966        Java Language Specification.
   17967      * libgcj now has support for using GCJ as a JIT, using the
   17968        gnu.gcj.jit family of system properties.
   17969      * libgcj can now find a shared library corresponding to the bytecode
   17970        representation of a class. See the documentation for the new
   17971        gcj-dbtool program, and the new gnu.gcj.precompiled.db.path system
   17972        property.
   17973      * There have been many improvements to the class library. Here are
   17974        some highlights:
   17975           + Much more of AWT and Swing exist.
   17976           + Many new packages and classes were added, including
   17977             java.util.regex, java.net.URI, javax.crypto,
   17978             javax.crypto.interfaces, javax.crypto.spec, javax.net,
   17979             javax.net.ssl, javax.security.auth,
   17980             javax.security.auth.callback, javax.security.auth.login,
   17981             javax.security.auth.x500, javax.security.sasl, org.ietf.jgss,
   17982             javax.imageio, javax.imageio.event, javax.imageio.spi,
   17983             javax.print, javax.print.attribute,
   17984             javax.print.attribute.standard, javax.print.event, and
   17985             javax.xml
   17986           + Updated SAX and DOM, and imported GNU JAXP
   17987 
   17988   Fortran
   17989 
   17990      * A new [9]Fortran front end has replaced the aging GNU Fortran 77
   17991        front end. The new front end supports Fortran 90 and Fortran 95. It
   17992        may not yet be as stable as the old Fortran front end.
   17993 
   17994   Ada
   17995 
   17996      * Ada (with tasking and Zero Cost Exceptions) is now available on
   17997        many more targets, including but not limited to: alpha-linux,
   17998        hppa-hpux, hppa-linux, powerpc-darwin, powerpc-linux, s390-linux,
   17999        s390x-linux, sparc-linux.
   18000      * Some of the new Ada 2005 features are now implemented like
   18001        Wide_Wide_Character and Ada.Containers.
   18002      * Many bugs have been fixed, tools and documentation improved.
   18003      * To compile Ada from the sources, install an older working Ada
   18004        compiler and then use --enable-languages=ada at configuration time,
   18005        since the Ada front end is not currently activated by default. See
   18006        the [10]Installing GCC for details.
   18007 
   18008 [11]New Targets and Target Specific Improvements
   18009 
   18010   H8/300
   18011 
   18012      * The frame layout has changed. In the new layout, the prologue of a
   18013        function first saves registers and then allocate space for locals,
   18014        resulting in an 1% improvement on code size.
   18015 
   18016   IA-32/x86-64 (AMD64)
   18017 
   18018      * The acos, asin, drem, exp10, exp2, expm1, fmod, ilogb, log10,
   18019        log1p, log2, logb and tan mathematical builtins (and their float
   18020        and long double variants) are now implemented as inline x87
   18021        intrinsics when using -ffast-math.
   18022      * The ceil, floor, nearbyint, rint and trunc mathematical builtins
   18023        (and their float and long double variants) are now implemented as
   18024        inline x87 intrinsics when using -ffast-math.
   18025      * The x87's fsincos instruction is now used automatically with
   18026        -ffast-math when calculating both the sin and cos of the same
   18027        argument.
   18028      * Instruction selection for multiplication and division by constants
   18029        has been improved.
   18030 
   18031   IA-64
   18032 
   18033      * Floating point division, integer division and sqrt are now inlined,
   18034        resulting in significant performance improvements on some codes.
   18035 
   18036   MIPS
   18037 
   18038      * Division by zero checks now use conditional traps if the target
   18039        processor supports them. This decreases code size by one word per
   18040        division operation. The old behavior (branch and break) can be
   18041        obtained either at configure time by passing --with-divide=breaks
   18042        to configure or at runtime by passing -mdivide-breaks to GCC.
   18043      * Support for MIPS64 paired-single instructions has been added. It is
   18044        enabled by -mpaired-single and can be accessed using both the
   18045        target-independent vector extensions and new MIPS-specific built-in
   18046        functions.
   18047      * Support for the MIPS-3D ASE has been added. It is enabled by
   18048        -mips3d and provides new MIPS-3D-specific built-in functions.
   18049      * The -mexplicit-relocs option now supports static n64 code (as is
   18050        used, for example, in 64-bit linux kernels). -mexplicit-relocs
   18051        should now be feature-complete and is enabled by default when GCC
   18052        is configured to use a compatible assembler.
   18053      * Support for the NEC VR4130 series has been added. This support
   18054        includes the use of VR-specific instructions and a new VR4130
   18055        scheduler. Full VR4130 support can be selected with -march=vr4130
   18056        while code for any ISA can be tuned for the VR4130 using
   18057        -mtune=vr4130. There is also a new -mvr4130-align option that
   18058        produces better schedules at the cost of increased code size.
   18059      * Support for the Broadcom SB-1 has been extended. There is now an
   18060        SB-1 scheduler as well as support for the SB-1-specific
   18061        paired-single instructions. Full SB-1 support can be selected with
   18062        -march=sb1 while code for any ISA can be optimized for the SB-1
   18063        using -mtune=sb1.
   18064      * The compiler can now work around errata in R4000, R4400, VR4120 and
   18065        VR4130 processors. These workarounds are enabled by -mfix-r4000,
   18066        -mfix-r4400, -mfix-vr4120 and -mfix-vr4130 respectively. The VR4120
   18067        and VR4130 workarounds need binutils 2.16 or above.
   18068      * IRIX shared libraries are now installed into the standard library
   18069        directories: o32 libraries go into lib/, n32 libraries go into
   18070        lib32/ and n64 libraries go into lib64/.
   18071      * The compiler supports a new -msym32 option. It can be used to
   18072        optimize n64 code in which all symbols are known to have 32-bit
   18073        values.
   18074 
   18075   S/390 and zSeries
   18076 
   18077      * New command-line options help to generate code intended to run in
   18078        an environment where stack space is restricted, e.g. Linux kernel
   18079        code:
   18080           + -mwarn-framesize and -mwarn-dynamicstack trigger compile-time
   18081             warnings for single functions that require large or dynamic
   18082             stack frames.
   18083           + -mstack-size and -mstack-guard generate code that checks for
   18084             stack overflow at run time.
   18085           + -mpacked-stack generates code that reduces the stack frame
   18086             size of many functions by reusing unneeded parts of the stack
   18087             bias area.
   18088      * The -msoft-float option now ensures that generated code never
   18089        accesses floating point registers.
   18090      * The s390x-ibm-tpf target now fully supports C++, including
   18091        exceptions and threads.
   18092      * Various changes to improve performance of the generated code have
   18093        been implemented, including:
   18094           + GCC now uses sibling calls where possible.
   18095           + Condition code handling has been optimized, allowing GCC to
   18096             omit redundant comparisons in certain cases.
   18097           + The cost function guiding many optimizations has been refined
   18098             to more accurately represent the z900 and z990 processors.
   18099           + The ADD LOGICAL WITH CARRY and SUBTRACT LOGICAL WITH BORROW
   18100             instructions are now used to avoid conditional branches in
   18101             certain cases.
   18102           + The back end now uses the LEGITIMIZE_RELOAD_ADDRESS feature to
   18103             optimize address arithmetic required to access large stack
   18104             frames.
   18105           + GCC now makes more efficient use of memory-to-memory type
   18106             instructions (MVC, CLC, ...).
   18107           + More precise tracking of special register use allows better
   18108             instruction scheduling, in particular of the function prologue
   18109             and epilogue sequences.
   18110           + The Java front end now generates inline code to implement
   18111             integer division, instead of calling library routines.
   18112 
   18113   SPARC
   18114 
   18115      * The options -mv8, -msparclite, -mcypress, -msupersparc, -mf930 and
   18116        -mf934 have been removed. They have been replaced with -mcpu=xxx.
   18117      * The internal model used to estimate the relative cost of each
   18118        instruction has been updated. It is expected to give better results
   18119        on recent UltraSPARC processors.
   18120      * Code generation for function prologues and epilogues has been
   18121        improved, resulting in better scheduling and allowing multiple exit
   18122        points in functions.
   18123      * Support for Sun's Visual Instruction Set (VIS) has been enhanced.
   18124        It is enabled by -mvis and provides new built-in functions for VIS
   18125        instructions on UltraSPARC processors.
   18126      * The option -mapp-regs has been turned on by default on Solaris too.
   18127 
   18128   NetWare
   18129 
   18130      * Novell NetWare (on ix86, no other hardware platform was ever really
   18131        supported by this OS) has been re-enabled and the ABI supported by
   18132        GCC has been brought into sync with that of MetroWerks CodeWarrior
   18133        (the ABI previously supported was that of some Unix systems, which
   18134        NetWare never tried to support).
   18135 
   18136 [12]Obsolete Systems
   18137 
   18138    Support for a number of older systems has been declared obsolete in GCC
   18139    4.0. Unless there is activity to revive them, the next release of GCC
   18140    will have their sources permanently removed.
   18141 
   18142    All GCC ports for the following processor architectures have been
   18143    declared obsolete:
   18144      * Intel i860
   18145      * Ubicom IP2022
   18146      * National Semiconductor NS32K (ns32k)
   18147      * Texas Instruments TMS320C[34]x
   18148 
   18149    Also, those for some individual systems have been obsoleted:
   18150      * SPARC family
   18151           + SPARClite-based systems (sparclite-*-coff, sparclite-*-elf,
   18152             sparc86x-*-elf)
   18153           + OpenBSD 32-bit (sparc-*-openbsd*)
   18154 
   18155 Documentation improvements
   18156 
   18157 Other significant improvements
   18158 
   18159      * Location lists are now generated by default when compiling with
   18160        debug info and optimization. Location lists provide more accurate
   18161        debug info about locations of variables and they allow debugging
   18162        code compiled with -fomit-frame-pointer.
   18163      * The -fvisibility option has been added which allows the default ELF
   18164        visibility of all symbols to be set per compilation and the new
   18165        #pragma GCC visibility preprocessor command allows the setting of
   18166        default ELF visibility for a region of code. Using
   18167        -fvisibility=hidden especially in combination with the new
   18168        -fvisibility-inlines-hidden can yield substantial improvements in
   18169        output binary quality including avoiding PLT indirection overheads,
   18170        reduction of the exported symbol count by up to 60% (with resultant
   18171        improvements to link and load times), better scope for the
   18172        optimizer to improve code and up to a 20% reduction in binary size.
   18173        Using these options correctly yields a binary with a similar symbol
   18174        count to a Windows DLL.
   18175        Perhaps more importantly, this new feature finally allows (with
   18176        careful planning) complete avoidance of symbol clashes when
   18177        manually loading shared objects with RTLD_GLOBAL, thus finally
   18178        solving problems many projects such as python were forced to use
   18179        RTLD_LOCAL for (with its resulting issues for C++ correctness). You
   18180        can find more information about using these options at
   18181        [13]https://gcc.gnu.org/wiki/Visibility.
   18182      __________________________________________________________________
   18183 
   18184 [14]GCC 4.0.1
   18185 
   18186    This is the [15]list of problem reports (PRs) from GCC's bug tracking
   18187    system that are known to be fixed in the 4.0.1 release. This list might
   18188    not be complete (that is, it is possible that some PRs that have been
   18189    fixed are not listed here).
   18190 
   18191 [16]GCC 4.0.2
   18192 
   18193    This is the [17]list of problem reports (PRs) from GCC's bug tracking
   18194    system that are known to be fixed in the 4.0.2 release. This list might
   18195    not be complete (that is, it is possible that some PRs that have been
   18196    fixed are not listed here).
   18197 
   18198    Unfortunately, due to a release engineering failure, this release has a
   18199    regression on Solaris that will affect some C++ programs. We suggest
   18200    that Solaris users apply a [18]patch that corrects the problem. Users
   18201    who do not wish to apply the patch should explicitly link C++ programs
   18202    with the -pthreads option, even if they do not use threads. This
   18203    problem has been corrected in the current 4.0 branch sources and will
   18204    not be present in GCC 4.0.3.
   18205 
   18206 [19]GCC 4.0.3
   18207 
   18208    Starting with this release, the function getcontext is recognized by
   18209    the compiler as having the same semantics as the setjmp function. In
   18210    particular, the compiler will ensure that all registers are dead before
   18211    calling such a function and will emit a warning about the variables
   18212    that may be clobbered after the second return from the function.
   18213 
   18214 [20]GCC 4.0.4
   18215 
   18216    This is the [21]list of problem reports (PRs) from GCC's bug tracking
   18217    system that are known to be fixed in the 4.0.4 release. This list might
   18218    not be complete (that is, it is possible that some PRs that have been
   18219    fixed are not listed here).
   18220 
   18221    The 4.0.4 release is provided for those that require a high degree of
   18222    binary compatibility with previous 4.0.x releases. For most users, the
   18223    GCC team recommends that version 4.1.1 or later be used instead."
   18224 
   18225 
   18226     For questions related to the use of GCC, please consult these web
   18227     pages and the [22]GCC manuals. If that fails, the
   18228     [23]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   18229     web pages and the development of GCC are welcome on our developer
   18230     list at [24]gcc (a] gcc.gnu.org. All of [25]our lists have public
   18231     archives.
   18232 
   18233    Copyright (C) [26]Free Software Foundation, Inc. Verbatim copying and
   18234    distribution of this entire article is permitted in any medium,
   18235    provided this notice is preserved.
   18236 
   18237    These pages are [27]maintained by the GCC team. Last modified
   18238    2025-01-31.
   18239 
   18240 References
   18241 
   18242    1. https://gcc.gnu.org/gcc-4.0/changes.html#4.0.4
   18243    2. https://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html
   18244    3. https://gcc.gnu.org/projects/tree-ssa/
   18245    4. https://gcc.gnu.org/projects/tree-ssa/vectorization.html
   18246    5. https://gcc.gnu.org/news/sms.html
   18247    6. https://www.akkadia.org/drepper/dsohowto.pdf
   18248    7. https://gcc.gnu.org/gcc-4.0/changes.html#visibility
   18249    8. https://itanium-cxx-abi.github.io/cxx-abi/
   18250    9. https://gcc.gnu.org/fortran/
   18251   10. https://gcc.gnu.org/install/
   18252   11. https://gcc.gnu.org/gcc-4.0/changes.html#targets
   18253   12. https://gcc.gnu.org/gcc-4.0/changes.html#obsolete_systems
   18254   13. https://gcc.gnu.org/wiki/Visibility
   18255   14. https://gcc.gnu.org/gcc-4.0/changes.html#GCC4.0.1
   18256   15. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.0.1
   18257   16. https://gcc.gnu.org/gcc-4.0/changes.html#GCC4.0.2
   18258   17. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.0.2
   18259   18. https://gcc.gnu.org/ml/gcc-cvs/2005-09/msg00984.html
   18260   19. https://gcc.gnu.org/gcc-4.0/changes.html#GCC4.0.3
   18261   20. https://gcc.gnu.org/gcc-4.0/changes.html#GCC4.0.4
   18262   21. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.0.4
   18263   22. https://gcc.gnu.org/onlinedocs/
   18264   23. mailto:gcc-help (a] gcc.gnu.org
   18265   24. mailto:gcc (a] gcc.gnu.org
   18266   25. https://gcc.gnu.org/lists.html
   18267   26. https://www.fsf.org/
   18268   27. https://gcc.gnu.org/about.html
   18269 ======================================================================
   18270 http://gcc.gnu.org/gcc-3.4/index.html
   18271 
   18272                              GCC 3.4 Release Series
   18273 
   18274    (This release series is no longer supported.)
   18275 
   18276    May 26, 2006
   18277 
   18278    The [1]GNU project and the GCC developers are pleased to announce the
   18279    release of GCC 3.4.6.
   18280 
   18281    This release is a bug-fix release, containing fixes for regressions in
   18282    GCC 3.4.4 relative to previous releases of GCC. This is the last of the
   18283    3.4.x series.
   18284 
   18285    The GCC 3.4 release series includes numerous [2]new features,
   18286    improvements, bug fixes, and other changes, thanks to an [3]amazing
   18287    group of volunteers.
   18288 
   18289 Release History
   18290 
   18291    GCC 3.4.6
   18292           March 6, 2006 ([4]changes)
   18293 
   18294    GCC 3.4.5
   18295           November 30, 2005 ([5]changes)
   18296 
   18297    GCC 3.4.4
   18298           May 18, 2005 ([6]changes)
   18299 
   18300    GCC 3.4.3
   18301           November 4, 2004 ([7]changes)
   18302 
   18303    GCC 3.4.2
   18304           September 6, 2004 ([8]changes)
   18305 
   18306    GCC 3.4.1
   18307           July 1, 2004 ([9]changes)
   18308 
   18309    GCC 3.4.0
   18310           April 18, 2004 ([10]changes)
   18311 
   18312 References and Acknowledgements
   18313 
   18314    GCC used to stand for the GNU C Compiler, but since the compiler
   18315    supports several other languages aside from C, it now stands for the
   18316    GNU Compiler Collection.
   18317 
   18318    A list of [11]successful builds is updated as new information becomes
   18319    available.
   18320 
   18321    The GCC developers would like to thank the numerous people that have
   18322    contributed new features, improvements, bug fixes, and other changes as
   18323    well as test results to GCC. This [12]amazing group of volunteers is
   18324    what makes GCC successful.
   18325 
   18326    For additional information about GCC please refer to the [13]GCC
   18327    project web site or contact the [14]GCC development mailing list.
   18328 
   18329    To obtain GCC please use [15]our mirror sites, or [16]our version
   18330    control system.
   18331 
   18332 
   18333     For questions related to the use of GCC, please consult these web
   18334     pages and the [17]GCC manuals. If that fails, the
   18335     [18]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   18336     web pages and the development of GCC are welcome on our developer
   18337     list at [19]gcc (a] gcc.gnu.org. All of [20]our lists have public
   18338     archives.
   18339 
   18340    Copyright (C) [21]Free Software Foundation, Inc. Verbatim copying and
   18341    distribution of this entire article is permitted in any medium,
   18342    provided this notice is preserved.
   18343 
   18344    These pages are [22]maintained by the GCC team. Last modified
   18345    2022-10-26.
   18346 
   18347 References
   18348 
   18349    1. http://www.gnu.org/
   18350    2. https://gcc.gnu.org/gcc-3.4/changes.html
   18351    3. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   18352    4. https://gcc.gnu.org/gcc-3.4/changes.html#3.4.6
   18353    5. https://gcc.gnu.org/gcc-3.4/changes.html#3.4.5
   18354    6. https://gcc.gnu.org/gcc-3.4/changes.html#3.4.4
   18355    7. https://gcc.gnu.org/gcc-3.4/changes.html#3.4.3
   18356    8. https://gcc.gnu.org/gcc-3.4/changes.html#3.4.2
   18357    9. https://gcc.gnu.org/gcc-3.4/changes.html#3.4.1
   18358   10. https://gcc.gnu.org/gcc-3.4/changes.html
   18359   11. https://gcc.gnu.org/gcc-3.4/buildstat.html
   18360   12. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   18361   13. https://gcc.gnu.org/index.html
   18362   14. mailto:gcc (a] gcc.gnu.org
   18363   15. https://gcc.gnu.org/mirrors.html
   18364   16. https://gcc.gnu.org/git.html
   18365   17. https://gcc.gnu.org/onlinedocs/
   18366   18. mailto:gcc-help (a] gcc.gnu.org
   18367   19. mailto:gcc (a] gcc.gnu.org
   18368   20. https://gcc.gnu.org/lists.html
   18369   21. https://www.fsf.org/
   18370   22. https://gcc.gnu.org/about.html
   18371 ======================================================================
   18372 http://gcc.gnu.org/gcc-3.4/changes.html
   18373 
   18374                              GCC 3.4 Release Series
   18375                         Changes, New Features, and Fixes
   18376 
   18377    The final release in the 3.4 release series is [1]GCC 3.4.6. The series
   18378    is now closed.
   18379 
   18380    GCC 3.4 has [2]many improvements in the C++ front end. Before reporting
   18381    a bug, please make sure it's really GCC, and not your code, that is
   18382    broken.
   18383 
   18384 Caveats
   18385 
   18386      * GNU Make is now required to build GCC.
   18387      * With -nostdinc the preprocessor used to ignore both standard
   18388        include paths and include paths contained in environment variables.
   18389        It was neither documented nor intended that environment variable
   18390        paths be ignored, so this has been corrected.
   18391      * GCC no longer accepts the options -fvolatile, -fvolatile-global and
   18392        -fvolatile-static. It is unlikely that they worked correctly in any
   18393        3.x release.
   18394      * GCC no longer ships <varargs.h>. Use <stdarg.h> instead.
   18395      * Support for all the systems [3]obsoleted in GCC 3.3 has been
   18396        removed from GCC 3.4. See below for a [4]list of systems which are
   18397        obsoleted in this release.
   18398      * GCC now requires an ISO C90 (ANSI C89) C compiler to build. K&R C
   18399        compilers will not work.
   18400      * The implementation of the [5]MIPS ABIs has changed. As a result,
   18401        the code generated for certain MIPS targets will not be binary
   18402        compatible with earlier releases.
   18403      * In previous releases, the MIPS port had a fake "hilo" register with
   18404        the user-visible name accum. This register has been removed.
   18405      * The implementation of the [6]SPARC ABIs has changed. As a result,
   18406        the code generated will not be binary compatible with earlier
   18407        releases in certain cases.
   18408      * The configure option --enable-threads=pthreads has been removed;
   18409        use --enable-threads=posix instead, which should have the same
   18410        effect.
   18411      * Code size estimates used by inlining heuristics for C, Objective-C,
   18412        C++ and Java have been redesigned significantly. As a result the
   18413        parameters of -finline-insns, --param max-inline-insns-single and
   18414        --param max-inline-insns-auto need to be reconsidered.
   18415      * --param max-inline-slope and --param min-inline-insns have been
   18416        removed; they are not needed for the new bottom-up inlining
   18417        heuristics.
   18418      * The new unit-at-a-time compilation scheme has several compatibility
   18419        issues:
   18420           + The order in which functions, variables, and top-level asm
   18421             statements are emitted may have changed. Code relying on some
   18422             particular ordering needs to be updated. The majority of such
   18423             top-level asm statements can be replaced by section
   18424             attributes.
   18425           + Unreferenced static variables and functions are removed. This
   18426             may result in undefined references when an asm statement
   18427             refers to the variable/function directly. In that case either
   18428             the variable/function shall be listed in asm statement operand
   18429             or in the case of top-level asm statements the attribute used
   18430             shall be used to force function/variable to be always output
   18431             and considered as a possibly used by unknown code.
   18432             For variables the attribute is accepted only by GCC 3.4 and
   18433             newer, while for earlier versions it is sufficient to use
   18434             unused to silence warnings about the variables not being
   18435             referenced. To keep code portable across different GCC
   18436             versions, you can use appropriate preprocessor conditionals.
   18437           + Static functions now can use non-standard passing conventions
   18438             that may break asm statements calling functions directly.
   18439             Again the attribute used shall be used to prevent this
   18440             behavior.
   18441        As a temporary workaround, -fno-unit-at-a-time can be used, but
   18442        this scheme may not be supported by future releases of GCC.
   18443      * GCC 3.4 automatically places zero-initialized variables in the .bss
   18444        section on some operating systems. Versions of GNU Emacs up to (and
   18445        including) 21.3 will not work correctly when using this
   18446        optimization; you can use -fno-zero-initialized-in-bss to disable
   18447        it.
   18448      * If GCC 3.4 is configured with --enable-threads=posix (the default
   18449        on most targets that support pthreads) then _REENTRANT will be
   18450        defined unconditionally by some libstdc++ headers. C++ code which
   18451        relies on that macro to detect whether multi-threaded code is being
   18452        compiled might change in meaning, possibly resulting in linker
   18453        errors for single-threaded programs. Affected users of [7]Boost
   18454        should compile single-threaded code with -DBOOST_DISABLE_THREADS.
   18455        See Bugzilla for [8]more information.
   18456 
   18457 General Optimizer Improvements
   18458 
   18459      * Usability of the profile feedback and coverage testing has been
   18460        improved.
   18461           + Performance of profiled programs has been improved by faster
   18462             profile merging code.
   18463           + Better use of the profile feedback for optimization (loop
   18464             unrolling and loop peeling).
   18465           + File locking support allowing fork() calls and parallel runs
   18466             of profiled programs.
   18467           + Coverage file format has been redesigned.
   18468           + gcov coverage tool has been improved.
   18469           + make profiledbootstrap available to build a faster compiler.
   18470             Experiments made on i386 hardware showed an 11% speedup on -O0
   18471             and a 7.5% speedup on -O2 compilation of a [9]large C++
   18472             testcase.
   18473           + New value profiling pass enabled via -fprofile-values
   18474           + New value profile transformations pass enabled via -fvpt aims
   18475             to optimize some code sequences by exploiting knowledge about
   18476             value ranges or other properties of the operands. At the
   18477             moment a conversion of expensive divisions into cheaper
   18478             operations has been implemented.
   18479           + New -fprofile-generate and -fprofile-use command-line options
   18480             to simplify the use of profile feedback.
   18481      * A new unit-at-a-time compilation scheme for C, Objective-C, C++ and
   18482        Java which is enabled via -funit-at-a-time (and implied by -O2). In
   18483        this scheme a whole file is parsed first and optimized later. The
   18484        following basic inter-procedural optimizations are implemented:
   18485           + Removal of unreachable functions and variables
   18486           + Discovery of local functions (functions with static linkage
   18487             whose address is never taken)
   18488           + On i386, these local functions use register parameter passing
   18489             conventions.
   18490           + Reordering of functions in topological order of the call graph
   18491             to enable better propagation of optimizing hints (such as the
   18492             stack alignments needed by functions) in the back end.
   18493           + Call graph based out-of-order inlining heuristics which allows
   18494             to limit overall compilation unit growth (--param
   18495             inline-unit-growth).
   18496        Overall, the unit-at-a-time scheme produces a 1.3% improvement for
   18497        the SPECint2000 benchmark on the i386 architecture (AMD Athlon
   18498        CPU).
   18499      * More realistic code size estimates used by inlining for C,
   18500        Objective-C, C++ and Java. The growth of large functions can now be
   18501        limited via --param large-function-insns and --param
   18502        large-function-growth.
   18503      * A new cfg-level loop optimizer pass replaces the old loop unrolling
   18504        pass and adds two other loop transformations -- loop peeling and
   18505        loop unswitching -- and also uses the profile feedback to limit
   18506        code growth. (The three optimizations are enabled by
   18507        -funroll-loops, -fpeel-loops and -funswitch-loops flags,
   18508        respectively).
   18509        The old loop unroller still can be enabled by -fold-unroll-loops
   18510        and may produce better code in some cases, especially when the
   18511        webizer optimization pass is not run.
   18512      * A new web construction pass enabled via -fweb (and implied by -O3)
   18513        improves the quality of register allocation, CSE, first scheduling
   18514        pass and some other optimization passes by avoiding re-use of
   18515        pseudo registers with non-overlapping live ranges. The pass almost
   18516        always improves code quality but does make debugging difficult and
   18517        thus is not enabled by default by -O2
   18518        The pass is especially effective as cleanup after code duplication
   18519        passes, such as the loop unroller or the tracer.
   18520      * Experimental implementations of superblock or trace scheduling in
   18521        the second scheduling pass can be enabled via
   18522        -fsched2-use-superblocks and -fsched2-use-traces, respectively.
   18523 
   18524 New Languages and Language specific improvements
   18525 
   18526   Ada
   18527 
   18528      * The Ada front end has been updated to include numerous bug fixes
   18529        and enhancements. These include:
   18530           + Improved project file support
   18531           + Additional set of warnings about potential wrong code
   18532           + Improved error messages
   18533           + Improved code generation
   18534           + Improved cross reference information
   18535           + Improved inlining
   18536           + Better run-time check elimination
   18537           + Better error recovery
   18538           + More efficient implementation of unbounded strings
   18539           + Added features in GNAT.Sockets, GNAT.OS_Lib, GNAT.Debug_Pools,
   18540             ...
   18541           + New GNAT.xxxx packages (e.g. GNAT.Strings,
   18542             GNAT.Exception_Action)
   18543           + New pragmas
   18544           + New -gnatS switch replacing gnatpsta
   18545           + Implementation of new Ada features (in particular limited
   18546             with, limited aggregates)
   18547 
   18548   C/Objective-C/C++
   18549 
   18550      * Precompiled headers are now supported. Precompiled headers can
   18551        dramatically speed up compilation of some projects. There are some
   18552        known defects in the current precompiled header implementation that
   18553        will result in compiler crashes in relatively rare situations.
   18554        Therefore, precompiled headers should be considered a "technology
   18555        preview" in this release. Read the manual for details about how to
   18556        use precompiled headers.
   18557      * File handling in the preprocessor has been rewritten. GCC no longer
   18558        gets confused by symlinks and hardlinks, and now has a correct
   18559        implementation of #import and #pragma once. These two directives
   18560        have therefore been un-deprecated.
   18561      * The undocumented extension that allowed C programs to have a label
   18562        at the end of a compound statement, which has been deprecated since
   18563        GCC 3.0, has been removed.
   18564      * The cast-as-lvalue extension has been removed for C++ and
   18565        deprecated for C and Objective-C. In particular, code like this:
   18566         int i;
   18567         (char) i = 5;
   18568 
   18569        or this:
   18570         char *p;
   18571         ((int *) p)++;
   18572 
   18573        is no longer accepted for C++ and will not be accepted for C and
   18574        Objective-C in a future version.
   18575      * The conditional-expression-as-lvalue extension has been deprecated
   18576        for C and Objective-C. In particular, code like this:
   18577         int a, b, c;
   18578         (a ? b : c) = 2;
   18579 
   18580        will not be accepted for C and Objective-C in a future version.
   18581      * The compound-expression-as-lvalue extension has been deprecated for
   18582        C and Objective-C. In particular, code like this:
   18583         int a, b;
   18584         (a, b) = 2;
   18585 
   18586        will not be accepted for C and Objective-C in a future version. A
   18587        possible non-intrusive workaround is the following:
   18588         (*(a, &b)) = 2;
   18589 
   18590      * Several [10]built-in functions such as __builtin_popcount for
   18591        counting bits, finding the highest and lowest bit in a word, and
   18592        parity have been added.
   18593      * The -fwritable-strings option has been deprecated and will be
   18594        removed.
   18595      * Many C math library functions are now recognized as built-ins and
   18596        optimized.
   18597      * The C, C++, and Objective-C compilers can now handle source files
   18598        written in any character encoding supported by the host C library.
   18599        The default input character set is taken from the current locale,
   18600        and may be overridden with the -finput-charset command line option.
   18601        In the future we will add support for inline encoding markers.
   18602 
   18603   [11]C++
   18604 
   18605      * G++ is now much closer to full conformance to the ISO/ANSI C++
   18606        standard. This means, among other things, that a lot of invalid
   18607        constructs which used to be accepted in previous versions will now
   18608        be rejected. It is very likely that existing C++ code will need to
   18609        be fixed. This document lists some of the most common issues.
   18610      * A hand-written recursive-descent C++ parser has replaced the
   18611        YACC-derived C++ parser from previous GCC releases. The new parser
   18612        contains much improved infrastructure needed for better parsing of
   18613        C++ source codes, handling of extensions, and clean separation
   18614        (where possible) between proper semantics analysis and parsing. The
   18615        new parser fixes many bugs that were found in the old parser.
   18616      * You must now use the typename and template keywords to disambiguate
   18617        dependent names, as required by the C++ standard.
   18618         struct K {
   18619           typedef int mytype_t;
   18620         };
   18621 
   18622         template <class T1> struct A {
   18623           template <class T2> struct B {
   18624               void callme(void);
   18625             };
   18626 
   18627           template <int N> void bar(void)
   18628           {
   18629             // Use 'typename' to tell the parser that T1::mytype_t names
   18630             //  a type. This is needed because the name is dependent (in
   18631             //  this case, on template parameter T1).
   18632             typename T1::mytype_t x;
   18633             x = 0;
   18634           }
   18635         };
   18636 
   18637         template <class T> void template_func(void)
   18638         {
   18639           // Use 'template' to prefix member templates within
   18640           //  dependent types (a has type A<T>, which depends on
   18641           //  the template parameter T).
   18642           A<T> a;
   18643           a.template bar<0>();
   18644 
   18645           // Use 'template' to tell the parser that B is a nested
   18646           //  template class (dependent on template parameter T), and
   18647           //  'typename' because the whole A<T>::B<int> is
   18648           //  the name of a type (again, dependent).
   18649           typename A<T>::template B<int> b;
   18650           b.callme();
   18651         }
   18652 
   18653         void non_template_func(void)
   18654         {
   18655           // Outside of any template class or function, no names can be
   18656           //  dependent, so the use of the keyword 'typename' and 'template'
   18657           //  is not needed (and actually forbidden).
   18658           A<K> a;
   18659           a.bar<0>();
   18660           A<K>::B<float> b;
   18661           b.callme();
   18662         }
   18663      * In a template definition, unqualified names will no longer find
   18664        members of a dependent base (as specified by [temp.dep]/3 in the
   18665        C++ standard). For example,
   18666         template <typename T> struct B {
   18667           int m;
   18668           int n;
   18669           int f ();
   18670           int g ();
   18671         };
   18672         int n;
   18673         int g ();
   18674         template <typename T> struct C : B<T> {
   18675           void h ()
   18676           {
   18677             m = 0; // error
   18678             f ();  // error
   18679             n = 0; // ::n is modified
   18680             g ();  // ::g is called
   18681           }
   18682         };
   18683        You must make the names dependent, e.g. by prefixing them with
   18684        this->. Here is the corrected definition of C<T>::h,
   18685         template <typename T> void C<T>::h ()
   18686         {
   18687           this->m = 0;
   18688           this->f ();
   18689           this->n = 0
   18690           this->g ();
   18691         }
   18692        As an alternative solution (unfortunately not backwards compatible
   18693        with GCC 3.3), you may use using declarations instead of this->:
   18694         template <typename T> struct C : B<T> {
   18695           using B<T>::m;
   18696           using B<T>::f;
   18697           using B<T>::n;
   18698           using B<T>::g;
   18699           void h ()
   18700           {
   18701             m = 0;
   18702             f ();
   18703             n = 0;
   18704             g ();
   18705           }
   18706         };
   18707      * In templates, all non-dependent names are now looked up and bound
   18708        at definition time (while parsing the code), instead of later when
   18709        the template is instantiated. For instance:
   18710         void foo(int);
   18711 
   18712         template <int> struct A {
   18713           static void bar(void){
   18714             foo('a');
   18715           }
   18716         };
   18717 
   18718         void foo(char);
   18719 
   18720         int main()
   18721         {
   18722           A<0>::bar();    // Calls foo(int), used to call foo(char).
   18723         }
   18724 
   18725      * In an explicit instantiation of a class template, you must use
   18726        class or struct before the template-id:
   18727         template <int N>
   18728         class A {};
   18729 
   18730         template A<0>;         // error, not accepted anymore
   18731         template class A<0>;   // OK
   18732      * The "named return value" and "implicit typename" extensions have
   18733        been removed.
   18734      * Default arguments in function types have been deprecated and will
   18735        be removed.
   18736      * ARM-style name-injection of friend declarations has been deprecated
   18737        and will be removed. For example: struct S { friend void f(); };
   18738        void g() { f(); } will not be accepted by future versions of G++;
   18739        instead a declaration of "f" will need to be present outside of the
   18740        scope of "S".
   18741      * Covariant returns are implemented for all but varadic functions
   18742        that require an adjustment.
   18743      * When -pedantic is used, G++ now issues errors about spurious
   18744        semicolons. For example,
   18745         namespace N {}; // Invalid semicolon.
   18746         void f() {}; // Invalid semicolon.
   18747      * G++ no longer accepts attributes for a declarator after the
   18748        initializer associated with that declarator. For example,
   18749         X x(1) __attribute__((...));
   18750        is no longer accepted. Instead, use:
   18751         X x __attribute__((...)) (1);
   18752      * Inside the scope of a template class, the name of the class itself
   18753        can be treated as either a class or a template. So GCC used to
   18754        accept the class name as argument of type template, and template
   18755        template parameter. However this is not C++ standard compliant. Now
   18756        the name is not treated as a valid template template argument
   18757        unless you qualify the name by its scope. For example, the code
   18758        below no longer compiles.
   18759         template <template <class> class TT> class X {};
   18760         template <class T> class Y {
   18761           X<Y> x; // Invalid, Y is always a type template parameter.
   18762         };
   18763        The valid code for the above example is
   18764           X< ::Y> x; // Valid.
   18765        (Notice the space between < and : to prevent GCC to interpret this
   18766        as a digraph for [.)
   18767      * Friend declarations that refer to template specializations are
   18768        rejected if the template has not already been declared. For
   18769        example,
   18770         template <typename T>
   18771         class C {
   18772           friend void f<> (C&);
   18773         };
   18774        is rejected. You must first declare f as a template,
   18775         template <typename T>
   18776         void f(T);
   18777      * In case of friend declarations, every name used in the friend
   18778        declaration must be accessible at the point of that declaration.
   18779        Previous versions of G++ used to be less strict about this and
   18780        allowed friend declarations for private class members, for example.
   18781        See the ISO C++ Standard Committee's [12]defect report #209 for
   18782        details.
   18783      * Declaration of member functions of class templates as friends are
   18784        supported. For example,
   18785         template <typename T> struct A {
   18786           void f();
   18787         };
   18788         class C {
   18789           template <typename T> friend void A<T>::f();
   18790         };
   18791      * You must use template <> to introduce template specializations, as
   18792        required by the standard. For example,
   18793         template <typename T>
   18794         struct S;
   18795 
   18796         struct S<int> { };
   18797        is rejected. You must write,
   18798         template <> struct S<int> {};
   18799      * G++ used to accept code like this,
   18800         struct S {
   18801           int h();
   18802           void f(int i = g());
   18803           int g(int i = h());
   18804         };
   18805        This behavior is not mandated by the standard. Now G++ issues an
   18806        error about this code. To avoid the error, you must move the
   18807        declaration of g before the declaration of f. The default arguments
   18808        for g must be visible at the point where it is called.
   18809      * The C++ ABI Section 3.3.3 specifications for the array construction
   18810        routines __cxa_vec_new2 and __cxa_vec_new3 were changed to return
   18811        NULL when the allocator argument returns NULL. These changes are
   18812        incorporated into the libstdc++ runtime library.
   18813      * Using a name introduced by a typedef in a friend declaration or in
   18814        an explicit instantiation is now rejected, as specified by the ISO
   18815        C++ standard.
   18816         class A;
   18817         typedef A B;
   18818         class C {
   18819           friend class B;      // error, no typedef name here
   18820           friend B;            // error, friend always needs class/struct/enum
   18821           friend class A;      // OK
   18822         };
   18823 
   18824         template <int> class Q {};
   18825         typedef Q<0> R;
   18826         template class R;      // error, no typedef name here
   18827         template class Q<0>;   // OK
   18828      * When allocating an array with a new expression, GCC used to allow
   18829        parentheses around the type name. This is actually ill-formed and
   18830        it is now rejected:
   18831         int* a = new (int)[10];    // error, not accepted anymore
   18832         int* a = new int[10];      // OK
   18833      * When binding an rvalue of class type to a reference, the copy
   18834        constructor of the class must be accessible. For instance, consider
   18835        the following code:
   18836         class A
   18837         {
   18838         public:
   18839           A();
   18840 
   18841         private:
   18842           A(const A&);   // private copy ctor
   18843         };
   18844 
   18845         A makeA(void);
   18846         void foo(const A&);
   18847 
   18848         void bar(void)
   18849         {
   18850           foo(A());       // error, copy ctor is not accessible
   18851           foo(makeA());   // error, copy ctor is not accessible
   18852 
   18853           A a1;
   18854           foo(a1);        // OK, a1 is a lvalue
   18855         }
   18856        This might be surprising at first sight, especially since most
   18857        popular compilers do not correctly implement this rule ([13]further
   18858        details).
   18859      * When forming a pointer to member or a pointer to member function,
   18860        access checks for class visibility (public, protected, private) are
   18861        now performed using the qualifying scope of the name itself. This
   18862        is better explained with an example:
   18863         class A
   18864         {
   18865         public:
   18866           void pub_func();
   18867         protected:
   18868           void prot_func();
   18869         private:
   18870           void priv_func();
   18871         };
   18872 
   18873         class B : public A
   18874         {
   18875         public:
   18876           void foo()
   18877           {
   18878             &A::pub_func;   // OK, pub_func is accessible through A
   18879             &A::prot_func;  // error, cannot access prot_func through A
   18880             &A::priv_func;  // error, cannot access priv_func through A
   18881 
   18882             &B::pub_func;   // OK, pub_func is accessible through B
   18883             &B::prot_func;  // OK, can access prot_func through B (within B)
   18884             &B::priv_func;  // error, cannot access priv_func through B
   18885           }
   18886         };
   18887 
   18888     Runtime Library (libstdc++)
   18889 
   18890      * Optimization work:
   18891           + Streamlined streambuf, filebuf, separate synched with C
   18892             Standard I/O streambuf.
   18893           + All formatted I/O now uses cached locale information.
   18894           + STL optimizations (memory/speed for list, red-black trees as
   18895             used by sets and maps).
   18896           + More use of GCC builtins.
   18897           + String optimizations (avoid contention on
   18898             increment/decrement-and-test of the reference count in the
   18899             empty-string object, constructor from input_iterators
   18900             speedup).
   18901      * Static linkage size reductions.
   18902      * Large File Support (files larger than 2 GB on 32-bit systems).
   18903      * Wide character and variable encoding filebuf work (UTF-8, Unicode).
   18904      * Generic character traits.
   18905      * Also support wchar_t specializations on Mac OS 10.3.x, FreeBSD 5.x,
   18906        Solaris 2.7 and above, AIX 5.x, Irix 6.5.
   18907      * The allocator class is now standard-conformant, and two additional
   18908        extension allocators have been added, mt_alloc and
   18909        bitmap_allocator.
   18910      * PCH support: -include bits/stdc++.h (2x compile speedup).
   18911      * Rewrote __cxa_demangle with support for C++ style allocators.
   18912      * New debug modes for STL containers and iterators.
   18913      * Testsuite rewrite: five times as many tests, plus increasingly
   18914        sophisticated tests, including I/O, MT, multi-locale, wide and
   18915        narrow characters.
   18916      * Use current versions of GNU "autotools" for build/configuration.
   18917 
   18918   Objective-C
   18919 
   18920      * The Objective-C front end has been updated to include the numerous
   18921        bug fixes and enhancements previously available only in Apple's
   18922        version of GCC. These include:
   18923           + Structured exception (@try... @catch... @finally, @throw) and
   18924             synchronization (@synchronized) support. These are accessible
   18925             via the -fobjc-exceptions switch; as of this writing, they may
   18926             only be used in conjunction with -fnext-runtime on Mac OS X
   18927             10.3 and later. See [14]Options Controlling Objective-C
   18928             Dialect for more information.
   18929           + An overhaul of @encode logic. The C99 _Bool and C++ bool type
   18930             may now be encoded as 'B'. In addition, the back-end/codegen
   18931             dependencies have been removed.
   18932           + An overhaul of message dispatch construction, ensuring that
   18933             the various receiver types (and casts thereof) are handled
   18934             properly, and that correct diagnostics are issued.
   18935           + Support for "Zero-Link" (-fzero-link) and "Fix-and-Continue"
   18936             (-freplace-objc-classes) debugging modes, currently available
   18937             on Mac OS X 10.3 and later. See [15]Options Controlling
   18938             Objective-C Dialect for more information.
   18939           + Access to optimized runtime entry points (-fno-nil-receivers )
   18940             on the assumption that message receivers are never nil. This
   18941             is currently available on Mac OS X 10.3 and later. See
   18942             [16]Options Controlling Objective-C Dialect for more
   18943             information.
   18944 
   18945   Java
   18946 
   18947      * Compiling a .jar file will now cause non-.class entries to be
   18948        automatically compiled as resources.
   18949      * libgcj has been ported to Darwin.
   18950      * Jeff Sturm has adapted Jan Hubicka's call graph optimization code
   18951        to gcj.
   18952      * libgcj has a new gcjlib URL type; this lets URLClassLoader load
   18953        code from shared libraries.
   18954      * libgcj has been much more completely merged with [17]GNU Classpath.
   18955      * Class loading is now much more correct; in particular the caller's
   18956        class loader is now used when that is required.
   18957      * [18]Eclipse 2.x will run out of the box using gij.
   18958      * Parts of java.nio have been implemented. Direct and indirect
   18959        buffers work, as do fundamental file and socket operations.
   18960      * java.awt has been improved, though it is still not ready for
   18961        general use.
   18962      * The HTTP protocol handler now uses HTTP/1.1 and can handle the POST
   18963        method.
   18964      * The MinGW port has matured. Enhancements include socket timeout
   18965        support, thread interruption, improved Runtime.exec() handling and
   18966        support for accented characters in filenames.
   18967 
   18968   Fortran
   18969 
   18970      * Fortran improvements are listed in the [19]Fortran documentation.
   18971 
   18972 New Targets and Target Specific Improvements
   18973 
   18974   Alpha
   18975 
   18976      * Several [20]built-in functions have been added such as
   18977        __builtin_alpha_zap to allow utilizing the more obscure
   18978        instructions of the CPU.
   18979      * Parameter passing of complex arguments has changed to match the
   18980        ABI. This change is incompatible with previous GCC versions, but
   18981        does fix compatibility with the Tru64 compiler and several corner
   18982        cases where GCC was incompatible with itself.
   18983 
   18984   ARM
   18985 
   18986      * Nicolas Pitre has contributed his hand-coded floating-point support
   18987        code for ARM. It is both significantly smaller and faster than the
   18988        existing C-based implementation, even when building applications
   18989        for Thumb. The arm-elf configuration has been converted to use the
   18990        new code.
   18991      * Support for the Intel's iWMMXt architecture, a second generation
   18992        XScale processor, has been added. Enabled at run time with the
   18993        -mcpu=iwmmxt command line switch.
   18994      * A new ARM target has been added: arm-wince-pe. This is similar to
   18995        the arm-pe target, but it defaults to using the APCS32 ABI.
   18996      * The existing ARM pipeline description has been converted to the use
   18997        the [21]DFA processor pipeline model. There is not much change in
   18998        code performance, but the description is now [22]easier to
   18999        understand.
   19000      * Support for the Cirrus EP9312 Maverick floating point co-processor
   19001        added. Enabled at run time with the -mcpu=ep9312 command line
   19002        switch. Note however that the multilibs to support this chip are
   19003        currently disabled in gcc/config/arm/t-arm-elf, so if you want to
   19004        enable their production you will have to uncomment the entries in
   19005        that file.
   19006 
   19007   H8/300
   19008 
   19009      * Support for long long has been added.
   19010      * Support for saveall attribute has been added.
   19011      * Pavel Pisa contributed hand-written 32-bit-by-32-bit division code
   19012        for H8/300H and H8S, which is much faster than the previous
   19013        implementation.
   19014      * A lot of small performance improvements.
   19015 
   19016   IA-32/AMD64 (x86-64)
   19017 
   19018      * Tuning for K8 (AMD Opteron/Athlon64) core is available via
   19019        -march=k8 and -mcpu=k8.
   19020      * Scalar SSE code generation carefully avoids reformatting penalties,
   19021        hidden dependencies and minimizes the number of uops generated on
   19022        both Intel and AMD CPUs.
   19023      * Vector MMX and SSE operands are now passed in registers to improve
   19024        performance and match the argument passing convention used by the
   19025        Intel C++ Compiler. As a result it is not possible to call
   19026        functions accepting vector arguments compiled by older GCC version.
   19027      * Conditional jump elimination is now more aggressive on modern CPUs.
   19028      * The Athlon ports has been converted to use the DFA processor
   19029        pipeline description.
   19030      * Optimization of indirect tail calls is now possible in a similar
   19031        fashion as direct sibcall optimization.
   19032      * Further small performance improvements.
   19033      * -m128bit-long-double is now less buggy.
   19034      * __float128 support in 64-bit compilation.
   19035      * Support for data structures exceeding 2GB in 64-bit mode.
   19036      * -mcpu has been renamed to -mtune.
   19037 
   19038   IA-64
   19039 
   19040      * Tuning code for the Itanium 2 processor has been added. The
   19041        generation of code tuned for Itanium 2 (option -mtune=itanium2) is
   19042        enabled by default now. To generate code tuned for Itanium 1 the
   19043        option -mtune=itanium1 should be used.
   19044      * [23]DFA processor pipeline descriptions for the IA-64 processors
   19045        have been added. This resulted in about 3% improvement on the
   19046        SPECInt2000 benchmark for Itanium 2.
   19047      * Instruction bundling for the IA-64 processors has been rewritten
   19048        using the DFA pipeline hazard recognizer. It resulted in about 60%
   19049        compiler speedup on the SPECInt2000 C programs.
   19050 
   19051   M32R
   19052 
   19053      * Support for the M32R/2 processor has been added by Renesas.
   19054      * Support for an M32R GNU/Linux target and PIC code generation has
   19055        been added by Renesas.
   19056 
   19057   M68000
   19058 
   19059      * Bernardo Innocenti (Develer S.r.l.) has contributed the
   19060        m68k-uclinux target, based on former work done by Paul Dale
   19061        (SnapGear Inc.). Code generation for the ColdFire processors family
   19062        has been enhanced and extended to support the MCF 53xx and MCF 54xx
   19063        cores, integrating former work done by Peter Barada (Motorola).
   19064 
   19065   MIPS
   19066 
   19067     Processor-specific changes
   19068 
   19069      * Support for the RM7000 and RM9000 processors has been added. It can
   19070        be selected using the -march compiler option and should work with
   19071        any MIPS I (mips-*) or MIPS III (mips64-*) configuration.
   19072      * Support for revision 2 of the MIPS32 ISA has been added. It can be
   19073        selected with the command-line option -march=mips32r2.
   19074      * There is a new option, -mfix-sb1, to work around certain SB-1
   19075        errata.
   19076 
   19077     Configuration
   19078 
   19079      * It is possible to customize GCC using the following configure-time
   19080        options:
   19081           + --with-arch, which specifies the default value of the -march
   19082             option.
   19083           + --with-tune, which specifies the default value of the -mtune
   19084             option.
   19085           + --with-abi, which specifies the default ABI.
   19086           + --with-float=soft, which tells GCC to use software floating
   19087             point by default.
   19088           + --with-float=hard, which tells GCC to use hardware floating
   19089             point by default.
   19090      * A 64-bit GNU/Linux port has been added. The associated
   19091        configurations are mips64-linux-gnu and mips64el-linux-gnu.
   19092      * The 32-bit GNU/Linux port now supports Java.
   19093      * The IRIX 6 configuration now supports the o32 ABI and will build
   19094        o32 multilibs by default. This support is compatible with both
   19095        binutils and the SGI tools, but note that several features,
   19096        including debugging information and DWARF2 exception handling, are
   19097        only available when using the GNU assembler. Use of the GNU
   19098        assembler and linker (version 2.15 or above) is strongly
   19099        recommended.
   19100      * The IRIX 6 configuration now supports 128-bit long doubles.
   19101      * There are two new RTEMS-specific configurations, mips-rtems and
   19102        mipsel-rtems.
   19103      * There are two new *-elf configurations, mipsisa32r2-elf and
   19104        mipsisa32r2el-elf.
   19105 
   19106     General
   19107 
   19108      * Several [24]ABI bugs have been fixed. Unfortunately, these changes
   19109        will break binary compatibility with earlier releases.
   19110      * GCC can now use explicit relocation operators when generating
   19111        -mabicalls code. This behavior is controlled by -mexplicit-relocs
   19112        and can have several performance benefits. For example:
   19113           + It allows for more optimization of GOT accesses, including
   19114             better scheduling and redundancy elimination.
   19115           + It allows sibling calls to be implemented as jumps.
   19116           + n32 and n64 leaf functions can use a call-clobbered global
   19117             pointer instead of $28.
   19118           + The code to set up $gp can be removed from functions that
   19119             don't need it.
   19120      * A new option, -mxgot, allows the GOT to be bigger than 64k. This
   19121        option is equivalent to the assembler's -xgot option and should be
   19122        used instead of -Wa,-xgot.
   19123      * Frame pointer elimination is now supported when generating 64-bit
   19124        MIPS16 code.
   19125      * Inline block moves have been optimized to take more account of
   19126        alignment information.
   19127      * Many internal changes have been made to the MIPS port, mostly aimed
   19128        at reducing the reliance on assembler macros.
   19129 
   19130   PowerPC
   19131 
   19132      * GCC 3.4 releases have a number of fixes for PowerPC and PowerPC64
   19133        [25]ABI incompatibilities regarding the way parameters are passed
   19134        during functions calls. These changes may result in incompatibility
   19135        between code compiled with GCC 3.3 and GCC 3.4.
   19136 
   19137     PowerPC Darwin
   19138 
   19139      * Support for shared/dylib gcc libraries has been added. It is
   19140        enabled by default on powerpc-apple-darwin7.0.0 and up.
   19141      * Libgcj is enabled by default. On systems older than
   19142        powerpc-apple-darwin7.0.0 you need to install dlcompat.
   19143      * 128-bit IBM extended precision format support added for long
   19144        double.
   19145 
   19146     PowerPC64 GNU/Linux
   19147 
   19148      * By default, PowerPC64 GNU/Linux now uses natural alignment of
   19149        structure elements. The old four byte alignment for double, with
   19150        special rules for a struct starting with a double, can be chosen
   19151        with -malign-power. This change may result in incompatibility
   19152        between code compiled with GCC 3.3 and GCC 3.4.
   19153      * -mabi=altivec is now the default rather than -mabi=no-altivec.
   19154      * 128-bit IBM extended precision format support added for long
   19155        double.
   19156 
   19157   S/390 and zSeries
   19158 
   19159      * New command-line options allow to specify the intended execution
   19160        environment for generated code:
   19161           + -mesa/-mzarch allows to specify whether to generate code
   19162             running in ESA/390 mode or in z/Architecture mode (this is
   19163             applicable to 31-bit code only).
   19164           + -march allows to specify a minimum processor architecture
   19165             level (g5, g6, z900, or z990).
   19166           + -mtune allows to specify which processor to tune for.
   19167      * It is possible to customize GCC using the following configure-time
   19168        options:
   19169           + --with-mode, which specifies whether to default to assuming
   19170             ESA/390 or z/Architecture mode.
   19171           + --with-arch, which specifies the default value of the -march
   19172             option.
   19173           + --with-tune, which specifies the default value of the -mtune
   19174             option.
   19175      * Support for the z990 processor has been added, and can be selected
   19176        using -march=z990 or -mtune=z990. This includes instruction
   19177        scheduling tuned for the superscalar instruction pipeline of the
   19178        z990 processor as well as support for all new instructions provided
   19179        by the long-displacement facility.
   19180      * Support to generate 31-bit code optimized for zSeries processors
   19181        (running in ESA/390 or in z/Architecture mode) has been added. This
   19182        can be selected using -march=z900 and -mzarch respectively.
   19183      * Instruction scheduling for the z900 and z990 processors now uses
   19184        the DFA pipeline hazard recognizer.
   19185      * GCC no longer generates code to maintain a stack backchain,
   19186        previously used to generate stack backtraces for debugging
   19187        purposes. As replacement that does not incur runtime overhead,
   19188        DWARF-2 call frame information is provided by GCC; this is
   19189        supported by GDB 6.1. The old behavior can be restored using the
   19190        -mbackchain option.
   19191      * The stack frame size of functions may now exceed 2 GB in 64-bit
   19192        code.
   19193      * A port for the 64-bit IBM TPF operating system has been added; the
   19194        configuration is s390x-ibm-tpf. This configuration is supported as
   19195        cross-compilation target only.
   19196      * Various changes to improve the generated code have been
   19197        implemented, including:
   19198           + GCC now uses the MULTIPLY AND ADD and MULTIPLY AND SUBTRACT
   19199             instructions to significantly speed up many floating-point
   19200             applications.
   19201           + GCC now uses the ADD LOGICAL WITH CARRY and SUBTRACT LOGICAL
   19202             WITH BORROW instructions to speed up long long arithmetic.
   19203           + GCC now uses the SEARCH STRING instruction to implement
   19204             strlen().
   19205           + In many cases, function call overhead for 31-bit code has been
   19206             reduced by placing the literal pool after the function code
   19207             instead of after the function prolog.
   19208           + Register 14 is no longer reserved in 64-bit code.
   19209           + Handling of global register variables has been improved.
   19210 
   19211   SPARC
   19212 
   19213      * The option -mflat is deprecated.
   19214      * Support for large (> 2GB) frames has been added to the 64-bit port.
   19215      * Several [26]ABI bugs have been fixed. Unfortunately, these changes
   19216        will break binary compatibility with earlier releases.
   19217      * The default debugging format has been switched from STABS to
   19218        DWARF-2 for 32-bit code on Solaris 7 and later. DWARF-2 is already
   19219        the default debugging format for 64-bit code on Solaris.
   19220 
   19221   SuperH
   19222 
   19223      * Support for the SH2E processor has been added. Enabled at run time
   19224        with the -m2e command line switch, or at configure time by
   19225        specifying sh2e as the machine part of the target triple.
   19226 
   19227   V850
   19228 
   19229      * Support for the Mitsubishi V850E1 processor has been added. This is
   19230        a variant of the V850E processor with some additional debugging
   19231        instructions.
   19232 
   19233   Xtensa
   19234 
   19235      * Several ABI bugs have been fixed. Unfortunately, these changes
   19236        break binary compatibility with earlier releases.
   19237           + For big-endian processors, the padding of aggregate return
   19238             values larger than a word has changed. If the size of an
   19239             aggregate return value is not a multiple of 32 bits, previous
   19240             versions of GCC inserted padding in the most-significant bytes
   19241             of the first return value register. Aggregates larger than a
   19242             word are now padded in the least-significant bytes of the last
   19243             return value register used. Aggregates smaller than a word are
   19244             still padded in the most-significant bytes. The return value
   19245             padding has not changed for little-endian processors.
   19246           + Function arguments with 16-byte alignment are now properly
   19247             aligned.
   19248           + The implementation of the va_list type has changed. A va_list
   19249             value created by va_start from a previous release cannot be
   19250             used with va_arg from this release, or vice versa.
   19251      * More processor configuration options for Xtensa processors are
   19252        supported:
   19253           + the ABS instruction is now optional;
   19254           + the ADDX* and SUBX* instructions are now optional;
   19255           + an experimental CONST16 instruction can be used to synthesize
   19256             constants instead of loading them from constant pools.
   19257        These and other Xtensa processor configuration options can no
   19258        longer be enabled or disabled by command-line options; the
   19259        processor configuration must be specified by the xtensa-config.h
   19260        header file when building GCC. Additionally, the
   19261        -mno-serialize-volatile option is no longer supported.
   19262 
   19263 [27]Obsolete Systems
   19264 
   19265    Support for a number of older systems has been declared obsolete in GCC
   19266    3.4. Unless there is activity to revive them, the next release of GCC
   19267    will have their sources permanently removed.
   19268 
   19269    All configurations of the following processor architectures have been
   19270    declared obsolete:
   19271      * Mitsubishi D30V, d30v-*
   19272      * AT&T DSP1600 and DSP1610, dsp16xx-*
   19273      * Intel 80960, i960
   19274 
   19275    Also, some individual systems have been obsoleted:
   19276      * ARM Family
   19277           + Support for generating code for operation in APCS/26 mode
   19278             (-mapcs-26).
   19279      * IBM ESA/390
   19280           + "Bigfoot" port, i370-*. (The other port, s390-*, is actively
   19281             maintained and supported.)
   19282      * Intel 386 family
   19283           + MOSS, i?86-moss-msdos and i?86-*-moss*
   19284           + NCR 3000 running System V r.4, i?86-ncr-sysv4*
   19285           + FreeBSD with a.out object format, i?86-*-freebsd*aout* and
   19286             i?86-*-freebsd2*
   19287           + GNU/Linux with a.out object format, i?86-linux*aout*
   19288           + GNU/Linux with libc5, a.k.a. glibc1, i?86-linux*libc1*
   19289           + Interix versions before Interix 3, i?86-*-interix
   19290           + Mach microkernel, i?86-mach*
   19291           + SCO UnixWare with UDK, i?86-*-udk*
   19292           + Generic System V releases 1, 2, and 3, i?86-*-sysv[123]*
   19293           + VSTa microkernel, i386-*-vsta
   19294      * Motorola M68000 family
   19295           + HPUX, m68k-hp-hpux* and m68000-hp-hpux*
   19296           + NetBSD with a.out object format (before NetBSD 1.4),
   19297             m68k-*-*-netbsd* except m68k-*-*-netbsdelf*
   19298           + Generic System V r.4, m68k-*-sysv4*
   19299      * VAX
   19300           + Generic VAX, vax-*-* (This is generic VAX only; we have not
   19301             obsoleted any VAX triples for specific operating systems.)
   19302 
   19303 Documentation improvements
   19304 
   19305 Other significant improvements
   19306 
   19307      * The build system has undergone several significant cleanups.
   19308        Subdirectories will only be configured if they are being built, and
   19309        all subdirectory configures are run from the make command. The top
   19310        level has been autoconfiscated.
   19311      * Building GCC no longer writes to its source directory. This should
   19312        help those wishing to share a read-only source directory over NFS
   19313        or build from a CD. The exceptions to this feature are if you
   19314        configure with either --enable-maintainer-mode or
   19315        --enable-generated-files-in-srcdir.
   19316      * The -W warning option has been renamed to -Wextra, which is more
   19317        easily understood. The older spelling will be retained for
   19318        backwards compatibility.
   19319      * Substantial improvements in compile time have been made,
   19320        particularly for non-optimizing compilations.
   19321      __________________________________________________________________
   19322 
   19323 [28]GCC 3.4.0
   19324 
   19325   Bug Fixes
   19326 
   19327    A vast number of bugs have been fixed in 3.4.0, too many to publish a
   19328    complete list here. [29]Follow this link to query the Bugzilla database
   19329    for the list of over 900 bugs fixed in 3.4.0. This is the list of all
   19330    bugs marked as resolved and fixed in 3.4.0 that are not flagged as 3.4
   19331    regressions.
   19332      __________________________________________________________________
   19333 
   19334 [30]GCC 3.4.1
   19335 
   19336   Bug Fixes
   19337 
   19338    This section lists the problem reports (PRs) from GCC's bug tracking
   19339    system that are known to be fixed in the 3.4.1 release. This list might
   19340    not be complete (that is, it is possible that some PRs that have been
   19341    fixed are not listed here).
   19342 
   19343     Bootstrap failures
   19344 
   19345      * [31]10129 Ada bootstrap fails on PPC-Darwin - invalid assembler
   19346        emitted - PIC related
   19347      * [32]14576 [ARM] ICE in libiberty when building gcc-3.4 for arm-elf
   19348      * [33]14760 A bug in configure.in prevents using both
   19349        --program-suffix and --program-prefix
   19350      * [34]14671 [hppa64] bootstrap fails: ICE in
   19351        save_call_clobbered_regs, in caller_save.c
   19352      * [35]15093 [alpha][Java] make bootstrap fails to configure libffi on
   19353        Alpha
   19354      * [36]15178 Solaris 9/x86 fails linking after stage 3
   19355 
   19356     Multi-platform internal compiler errors (ICEs)
   19357 
   19358      * [37]12753 (preprocessor) Memory corruption in preprocessor on bad
   19359        input
   19360      * [38]13985 ICE in gcc.c-torture/compile/930621-1.c
   19361      * [39]14810 (c++) tree check failures with invalid code involving
   19362        templates
   19363      * [40]14883 (c++) ICE on invalid code, in cp_parser_lookup_name, in
   19364        cp/parser.c
   19365      * [41]15044 (c++) ICE on syntax error, template header
   19366      * [42]15057 (c++) Compiling of conditional value throw constructs
   19367        cause a segmentation violation
   19368      * [43]15064 (c++) typeid of template parameter gives ICE
   19369      * [44]15142 (c++) ICE when passing a string where a char* is expected
   19370        in a throw statement
   19371      * [45]15159 ICE in rtl_verify_flow_info_1
   19372      * [46]15165 (c++) ICE in instantiate_template
   19373      * [47]15193 Unary minus using pointer to V4SF vector causes
   19374        -fforce-mem to exhaust all memory
   19375      * [48]15209 (c++) Runs out of memory with packed structs
   19376      * [49]15227 (c++) Trouble with invalid function definition
   19377      * [50]15285 (c++) instantiate_type ICE when forming pointer to
   19378        template function
   19379      * [51]15299 (c++) ICE in resolve_overloaded_unification
   19380      * [52]15329 (c++) ICE on constructor of member template
   19381      * [53]15550 ICE in extract_insn, in recog.c
   19382      * [54]15554 (c++) ICE in tsubst_copy, in cp/pt.c
   19383      * [55]15640 (c++) ICE on invalid code in arg_assoc, in
   19384        cp/name-lookup.c
   19385      * [56]15666 [unit-at-a-time] Gcc abort on valid code
   19386      * [57]15696 (c++) ICE with bad pointer-to-member code
   19387      * [58]15701 (c++) ICE with friends and template template parameter
   19388      * [59]15761 ICE in do_SUBST, in combine.c
   19389      * [60]15829 (c++) ICE on Botan-1.3.13 due to -funroll-loops
   19390 
   19391     Ada
   19392 
   19393      * [61]14538 All RTEMS targets broken for gnat
   19394 
   19395     C front end
   19396 
   19397      * [62]12391 missing warning about assigning to an incomplete type
   19398      * [63]14649 atan(1.0) should not be a constant expression
   19399      * [64]15004 [unit-at-a-time] no warning for unused paramater in
   19400        static function
   19401      * [65]15749 --pedantic-errors behaves differently from --pedantic
   19402        with C-compiler on GNU/Linux
   19403 
   19404     C++ compiler and library
   19405 
   19406      * [66]10646 non-const reference is incorrectly matched in a "const T"
   19407        partial specialization
   19408      * [67]12077 wcin.rdbuf()->in_avail() return value too high
   19409      * [68]13598 enc_filebuf doesn't work
   19410      * [69]14211 const_cast returns lvalue but should be rvalue
   19411      * [70]14220 num_put::do_put() undesired float/double behavior
   19412      * [71]14245 problem with user-defined allocators in std::basic_string
   19413      * [72]14340 libstdc++ Debug mode: failure to convert iterator to
   19414        const_iterator
   19415      * [73]14600 __gnu_cxx::stdio_sync_filebuf should expose internal
   19416        FILE*
   19417      * [74]14668 no warning anymore for reevaluation of declaration
   19418      * [75]14775 LFS (large file support) tests missing
   19419      * [76]14821 Duplicate namespace alias declaration should not conflict
   19420      * [77]14930 Friend declaration ignored
   19421      * [78]14932 cannot use offsetof to get offsets of array elements in
   19422        g++ 3.4.0
   19423      * [79]14950 [non unit-at-a-time] always_inline does not mix with
   19424        templates and -O0
   19425      * [80]14962 g++ ignores #pragma redefine_extname
   19426      * [81]14975 Segfault on low-level write error during imbue
   19427      * [82]15002 Linewise stream input is unusably slow (std::string slow)
   19428      * [83]15025 compiler accepts redeclaration of template as
   19429        non-template
   19430      * [84]15046 [arm] Math functions misdetected by cross configuration
   19431      * [85]15069 a bit test on a variable of enum type is miscompiled
   19432      * [86]15074 g++ -lsupc++ still links against libstdc++
   19433      * [87]15083 spurious "statement has no effect" warning
   19434      * [88]15096 parse error with templates and pointer to const member
   19435      * [89]15287 combination of operator[] and operator .* fails in
   19436        templates
   19437      * [90]15317 __attribute__ unused in first parameter of constructor
   19438        gives error
   19439      * [91]15337 sizeof on incomplete type diagnostic
   19440      * [92]15361 bitset<>::_Find_next fails
   19441      * [93]15412 _GLIBCXX_ symbols symbols defined and used in different
   19442        namespaces
   19443      * [94]15427 valid code results in incomplete type error
   19444      * [95]15471 Incorrect member pointer offsets in anonymous
   19445        structs/unions
   19446      * [96]15503 nested template problem
   19447      * [97]15507 compiler hangs while laying out union
   19448      * [98]15542 operator & and template definitions
   19449      * [99]15565 SLES9: leading + sign for unsigned int with showpos
   19450      * [100]15625 friend defined inside a template fails to find static
   19451        function
   19452      * [101]15629 Function templates, overloads, and friend name injection
   19453      * [102]15742 'noreturn' attribute ignored in method of template
   19454        functions.
   19455      * [103]15775 Allocator::pointer consistently ignored
   19456      * [104]15821 Duplicate namespace alias within namespace rejected
   19457      * [105]15862 'enum yn' fails (confict with undeclared builtin)
   19458      * [106]15875 rejects pointer to member in template
   19459      * [107]15877 valid code using templates and anonymous enums is
   19460        rejected
   19461      * [108]15947 Puzzling error message for wrong destructor declaration
   19462        in template class
   19463      * [109]16020 cannot copy __gnu_debug::bitset
   19464      * [110]16154 input iterator concept too restrictive
   19465      * [111]16174 deducing top-level consts
   19466 
   19467     Java
   19468 
   19469      * [112]14315 Java compiler is not parallel make safe
   19470 
   19471     Fortran
   19472 
   19473      * [113]15151 [g77] incorrect logical i/o in 64-bit mode
   19474 
   19475     Objective-C
   19476 
   19477      * [114]7993 private variables cannot be shadowed in subclasses
   19478 
   19479     Optimization bugs
   19480 
   19481      * [115]15228 useless copies of floating point operands
   19482      * [116]15345 [non-unit-at-a-time] unreferenced nested inline
   19483        functions not optimized away
   19484      * [117]15945 Incorrect floating point optimization
   19485      * [118]15526 ftrapv aborts on 0 * (-1)
   19486      * [119]14690 Miscompiled POOMA tests
   19487      * [120]15112 GCC generates code to write to unchanging memory
   19488 
   19489     Preprocessor
   19490 
   19491      * [121]15067 Minor glitch in the source of cpp
   19492 
   19493     Main driver program bugs
   19494 
   19495      * [122]1963 collect2 interprets -oldstyle_liblookup as -o
   19496        ldstyle_liblookup
   19497 
   19498     x86-specific (Intel/AMD)
   19499 
   19500      * [123]15717 Error: can't resolve `L0' {*ABS* section} - `xx' {*UND*
   19501        section}
   19502 
   19503     HPPA-specific
   19504 
   19505      * [124]14782 GCC produces an unaligned data access at -O2
   19506      * [125]14828 FAIL: gcc.c-torture/execute/20030408-1.c execution, -O2
   19507      * [126]15202 ICE in reload_cse_simplify_operands, in postreload.c
   19508 
   19509     IA64-specific
   19510 
   19511      * [127]14610 __float80 constants incorrectly emitted
   19512      * [128]14813 init_array sections are initialized in the wrong order
   19513      * [129]14857 GCC segfault on duplicated asm statement
   19514      * [130]15598 Gcc 3.4 ICE on valid code
   19515      * [131]15653 Gcc 3.4 ICE on valid code
   19516 
   19517     MIPS-specific
   19518 
   19519      * [132]15189 wrong filling of delay slot with -march=mips1 -G0
   19520        -mno-split-addresses -mno-explicit-relocs
   19521      * [133]15331 Assembler error building gnatlib on IRIX 6.5 with GNU as
   19522        2.14.91
   19523      * [134]16144 Bogus reference to __divdf3 when -O1
   19524      * [135]16176 Miscompilation of unaligned data in MIPS backend
   19525 
   19526     PowerPC-specific
   19527 
   19528      * [136]11591 ICE in gcc.dg/altivec-5.c
   19529      * [137]12028 powerpc-eabispe produces bad sCOND operation
   19530      * [138]14478 rs6000 geu/ltu patterns generate incorrect code
   19531      * [139]14567 long double and va_arg complex args
   19532      * [140]14715 Altivec stack layout may overlap gpr save with stack
   19533        temps
   19534      * [141]14902 (libstdc++) Stream checking functions fail when -pthread
   19535        option is used.
   19536      * [142]14924 Compiler ICE on valid code
   19537      * [143]14960 -maltivec affects vector return with -mabi=no-altivec
   19538      * [144]15106 vector varargs failure passing from altivec to
   19539        non-altivec code for -m32
   19540      * [145]16026 ICE in function.c:4804, assign_parms, when -mpowerpc64 &
   19541        half-word operation
   19542      * [146]15191 -maltivec -mabi=no-altivec results in mis-aligned lvx
   19543        and stvx
   19544      * [147]15662 Segmentation fault when an exception is thrown - even if
   19545        try and catch are specified
   19546 
   19547     s390-specific
   19548 
   19549      * [148]15054 Bad code due to overlapping stack temporaries
   19550 
   19551     SPARC-specific
   19552 
   19553      * [149]15783 ICE with union assignment in 64-bit mode
   19554      * [150]15626 GCC 3.4 emits "ld: warning: relocation error:
   19555        R_SPARC_UA32"
   19556 
   19557     x86-64-specific
   19558 
   19559      * [151]14326 boehm-gc hardcodes to 3DNow! prefetch for x86_64
   19560      * [152]14723 Backported -march=nocona from mainline
   19561      * [153]15290 __float128 failed to pass to function properly
   19562 
   19563     Cygwin/Mingw32-specific
   19564 
   19565      * [154]15250 Option -mms-bitfields support on GCC 3.4 is not
   19566        conformant to MS layout
   19567      * [155]15551 -mtune=pentium4 -O2 with sjlj EH breaks stack probe
   19568        worker on windows32 targets
   19569 
   19570     Bugs specific to embedded processors
   19571 
   19572      * [156]8309 [m68k] -m5200 produces erroneous SImode set of short
   19573        varaible on stack
   19574      * [157]13250 [SH] Gcc code for rotation clobbers the register, but
   19575        gcc continues to use the register as if it was not clobbered
   19576      * [158]13803 [coldfire] movqi operand constraints too restrictivefor
   19577        TARGET_COLDFIRE
   19578      * [159]14093 [SH] ICE for code when using -mhitachi option in SH
   19579      * [160]14457 [m6811hc] ICE with simple c++ source
   19580      * [161]14542 [m6811hc] ICE on simple source
   19581      * [162]15100 [SH] cc1plus got hang-up on
   19582        libstdc++-v3/testsuite/abi_check.cc
   19583      * [163]15296 [CRIS] Delayed branch scheduling causing invalid code on
   19584        cris-*
   19585      * [164]15396 [SH] ICE with -O2 -fPIC
   19586      * [165]15782 [coldfire] m68k_output_mi_thunk emits wrong code for
   19587        ColdFire
   19588 
   19589     Testsuite problems (compiler not affected)
   19590 
   19591      * [166]11610 libstdc++ testcases 27_io/* don't work properly remotely
   19592      * [167]15488 (libstdc++) possibly insufficient file permissions for
   19593        executing test suite
   19594      * [168]15489 (libstdc++) testsuite_files determined incorrectly
   19595 
   19596     Documentation bugs
   19597 
   19598      * [169]13928 (libstdc++) no whatis info in some man pages generated
   19599        by doxygen
   19600      * [170]14150 Ada documentation out of date
   19601      * [171]14949 (c++) Need to document method visibility changes
   19602      * [172]15123 libstdc++-doc: Allocators.3 manpage is empty
   19603      __________________________________________________________________
   19604 
   19605 [173]GCC 3.4.2
   19606 
   19607   Bug Fixes
   19608 
   19609    This section lists the problem reports (PRs) from GCC's bug tracking
   19610    system that are known to be fixed in the 3.4.2 release. This list might
   19611    not be complete (that is, it is possible that some PRs that have been
   19612    fixed are not listed here).
   19613 
   19614     Bootstrap failures and issues
   19615 
   19616      * [174]16469 [mips-sgi-irix5.3] bootstrap fails in
   19617        libstdc++-v3/testsuite
   19618      * [175]16344 [hppa-linux-gnu] libstdc++'s PCH built by
   19619        profiledbootstrap does not work with the built compiler
   19620      * [176]16842 [Solaris/x86] mkheaders can not find mkheaders.conf
   19621 
   19622     Multi-platform internal compiler errors (ICEs)
   19623 
   19624      * [177]12608 (c++) ICE: expected class 't', have 'x' (error_mark) in
   19625        cp_parser_class_specifier, in cp/parser.c
   19626      * [178]14492 ICE in loc_descriptor_from_tree, in dwarf2out.c
   19627      * [179]15461 (c++) ICE due to NRV and inlining
   19628      * [180]15890 (c++) ICE in c_expand_expr, in c-common.c
   19629      * [181]16180 ICE: segmentation fault in RTL optimization
   19630      * [182]16224 (c++) ICE in write_unscoped_name (template/namespace)
   19631      * [183]16408 ICE: in delete_insn, in cfgrtl.c
   19632      * [184]16529 (c++) ICE for: namespace-alias shall not be declared as
   19633        the name of any other entity
   19634      * [185]16698 (c++) ICE with exceptions and declaration of __cxa_throw
   19635      * [186]16706 (c++) ICE in finish_member_declaration, in
   19636        cp/semantics.c
   19637      * [187]16810 (c++) Legal C++ program with cast gives ICE in
   19638        build_ptrmemfunc
   19639      * [188]16851 (c++) ICE when throwing a comma expression
   19640      * [189]16870 (c++) Boost.Spirit causes ICE in tsubst, in cp/pt.c
   19641      * [190]16904 (c++) ICE in finish_class_member_access_expr, in
   19642        cp/typeck.c
   19643      * [191]16905 (c++) ICE (segfault) with exceptions
   19644      * [192]16964 (c++) ICE in cp_parser_class_specifier due to
   19645        redefinition
   19646      * [193]17068 (c++) ICE: tree check: expected class 'd', have 'x'
   19647        (identifier_node) in dependent_template_p, in cp/pt.c
   19648 
   19649     Preprocessor bugs
   19650 
   19651      * [194]16366 Preprocessor option -remap causes memory corruption
   19652 
   19653     Optimization
   19654 
   19655      * [195]15345 unreferenced nested inline functions not optimized away
   19656      * [196]16590 Incorrect execution when compiling with -O2
   19657      * [197]16693 Bitwise AND is lost when used within a cast to an enum
   19658        of the same precision
   19659      * [198]17078 Jump into if(0) substatement fails
   19660 
   19661     Problems in generated debug information
   19662 
   19663      * [199]13956 incorrect stabs for nested local variables
   19664 
   19665     C front end bugs
   19666 
   19667      * [200]16684 GCC should not warn about redundant redeclarations of
   19668        built-ins
   19669 
   19670     C++ compiler and library
   19671 
   19672      * [201]12658 Thread safety problems in locale::global() and
   19673        locale::locale()
   19674      * [202]13092 g++ accepts invalid pointer-to-member conversion
   19675      * [203]15320 Excessive memory consumption
   19676      * [204]16246 Incorrect template argument deduction
   19677      * [205]16273 Memory exhausted when using nested classes and virtual
   19678        functions
   19679      * [206]16401 ostringstream in gcc 3.4.x very slow for big data
   19680      * [207]16411 undefined reference to
   19681        __gnu_cxx::stdio_sync_filebuf<char, std::char_traits<char>
   19682        >::file()
   19683      * [208]16489 G++ incorrectly rejects use of a null constant integral
   19684        expression as a null constant pointer
   19685      * [209]16618 offsetof fails with constant member
   19686      * [210]16637 syntax error reported for valid input code
   19687      * [211]16717 __attribute__((constructor)) broken in C++
   19688      * [212]16813 compiler error in DEBUG version of range insertion
   19689        std::map::insert
   19690      * [213]16853 pointer-to-member initialization from incompatible one
   19691        accepted
   19692      * [214]16889 ambiguity is not detected
   19693      * [215]16959 Segmentation fault in ios_base::sync_with_stdio
   19694 
   19695     Java compiler and library
   19696 
   19697      * [216]7587 direct threaded interpreter not thread-safe
   19698      * [217]16473 ServerSocket accept() leaks file descriptors
   19699      * [218]16478 Hash synchronization deadlock with finalizers
   19700 
   19701     Alpha-specific
   19702 
   19703      * [219]10695 ICE in dwarf2out_frame_debug_expr, in dwarf2out.c
   19704      * [220]16974 could not split insn (ice in final_scan_insn, in
   19705        final.c)
   19706 
   19707     x86-specific
   19708 
   19709      * [221]16298 ICE in output_operand
   19710      * [222]17113 ICE with SSE2 intrinsics
   19711 
   19712     x86-64 specific
   19713 
   19714      * [223]14697 libstdc++ couldn't find 32bit libgcc_s
   19715 
   19716     MIPS-specific
   19717 
   19718      * [224]15869 [mips64] No NOP after LW (with -mips1 -O0)
   19719      * [225]16325 [mips64] value profiling clobbers gp on mips
   19720      * [226]16357 [mipsisa64-elf] ICE copying 7 bytes between extern
   19721        char[]s
   19722      * [227]16380 [mips64] Use of uninitialised register after dbra
   19723        conversion
   19724      * [228]16407 [mips64] Unaligned access to local variables
   19725      * [229]16643 [mips64] verify_local_live_at_start ICE after
   19726        crossjumping & cfgcleanup
   19727 
   19728     ARM-specific
   19729 
   19730      * [230]15927 THUMB -O2: strength-reduced iteration variable ends up
   19731        off by 1
   19732      * [231]15948 THUMB: ICE with non-commutative cbranch
   19733      * [232]17019 THUMB: bad switch statement in md code for
   19734        addsi3_cbranch_scratch
   19735 
   19736     IA64-specific
   19737 
   19738      * [233]16130 ICE on valid code: in bundling, in config/ia64/ia64.c
   19739        (-mtune=merced)
   19740      * [234]16142 ICE on valid code: in bundling, in config/ia64/ia64.c
   19741        (-mtune=itanium)
   19742      * [235]16278 Gcc failed to build Linux kernel with -mtune=merced
   19743      * [236]16414 ICE on valid code: typo in comparison of asm_noperands
   19744        result
   19745      * [237]16445 ICE on valid code: don't count ignored insns
   19746      * [238]16490 ICE (segfault) while compiling with -fprofile-use
   19747      * [239]16683 ia64 does not honor SUBTARGET_EXTRA_SPECS
   19748 
   19749     PowerPC-specific
   19750 
   19751      * [240]16195 (ppc64): Miscompilation of GCC 3.3.x by 3.4.x
   19752      * [241]16239 ICE on ppc64 (mozilla 1.7 compile, -O1 -fno-exceptions
   19753        issue)
   19754 
   19755     SPARC-specific
   19756 
   19757      * [242]16199 ICE while compiling apache 2.0.49
   19758      * [243]16416 -m64 doesn't imply -mcpu=v9 anymore
   19759      * [244]16430 ICE when returning non-C aggregates larger than 16 bytes
   19760 
   19761     Bugs specific to embedded processors
   19762 
   19763      * [245]16379 [m32r] can't output large model function call of memcpy
   19764      * [246]17093 [m32r] ICE with -msdata=use -O0
   19765      * [247]17119 [m32r] ICE at switch case 0x8000
   19766 
   19767     DJGPP-specific
   19768 
   19769      * [248]15928 libstdc++ in 3.4.x doesn't cross-compile for djgpp
   19770 
   19771     Alpha Tru64-specific
   19772 
   19773      * [249]16210 libstdc++ gratuitously omits "long long" I/O
   19774 
   19775     Testsuite, documentation issues (compiler is not affected):
   19776 
   19777      * [250]15488 (libstdc++) possibly insufficient file permissions for
   19778        executing test suite
   19779      * [251]16250 ada/doctools runs makeinfo even in release tarball
   19780      __________________________________________________________________
   19781 
   19782 [252]GCC 3.4.3
   19783 
   19784    This is the [253]list of problem reports (PRs) from GCC's bug tracking
   19785    system that are known to be fixed in the 3.4.3 release. This list might
   19786    not be complete (that is, it is possible that some PRs that have been
   19787    fixed are not listed here).
   19788 
   19789     Bootstrap failures
   19790 
   19791      * [254]17369 [ia64] Bootstrap failure with binutils-2.15.90.0.1.1
   19792      * [255]17850 [arm-elf] bootstrap failure - libstdc++ uses strtold
   19793        when undeclared
   19794 
   19795     Internal compiler errors (ICEs) affecting multiple platforms
   19796 
   19797      * [256]13948 (java) GCJ segmentation fault while compiling GL4Java
   19798        .class files
   19799      * [257]14492 ICE in loc_descriptor_from_tree, in dwarf2out.c
   19800      * [258]16301 (c++) ICE when "strong" attribute is attached to a using
   19801        directive
   19802      * [259]16566 ICE with flexible arrays
   19803      * [260]17023 ICE with nested functions in parameter declaration
   19804      * [261]17027 ICE with noreturn function in loop at -O2
   19805      * [262]17524 ICE in grokdeclarator, in cp/decl.c
   19806      * [263]17826 (c++) ICE in cp_tree_equal
   19807 
   19808     C and optimization bugs
   19809 
   19810      * [264]15526 -ftrapv aborts on 0 * (-1)
   19811      * [265]16999 #ident stopped working
   19812      * [266]17503 quadratic behaviour in invalid_mode_change_p
   19813      * [267]17581 Long long arithmetic fails inside a switch/case
   19814        statement when compiled with -O2
   19815      * [268]18129 -fwritable-strings doesn't work
   19816 
   19817     C++ compiler and library bugs
   19818 
   19819      * [269]10975 incorrect initial ostringstream::tellp()
   19820      * [270]11722 Unbuffered filebuf::sgetn is slow
   19821      * [271]14534 Unrecognizing static function as a template parameter
   19822        when its return value is also templated
   19823      * [272]15172 Copy constructor optimization in aggregate
   19824        initialization
   19825      * [273]15786 Bad error message for frequently occuring error.
   19826      * [274]16162 Rejects valid member-template-definition
   19827      * [275]16612 empty basic_strings can't live in shared memory
   19828      * [276]16715 std::basic_iostream is instantiated when used, even
   19829        though instantiations are already contained in libstdc++
   19830      * [277]16848 code in /ext/demangle.h appears broken
   19831      * [278]17132 GCC fails to eliminate function template specialization
   19832        when argument deduction fails
   19833      * [279]17259 One more _S_leaf incorrectly qualified with _RopeRep::
   19834        in ropeimpl.h
   19835      * [280]17327 use of `enumeral_type' in template type unification
   19836      * [281]17393 "unused variable '._0'" warning with -Wall
   19837      * [282]17501 Confusion with member templates
   19838      * [283]17537 g++ not passing -lstdc++ to linker when all command line
   19839        arguments are libraries
   19840      * [284]17585 usage of unqualified name of static member from within
   19841        class not allowed
   19842      * [285]17821 Poor diagnostic for using "." instead of "->"
   19843      * [286]17829 wrong error: call of overloaded function is ambiguous
   19844      * [287]17851 Misleading diagnostic for invalid function declarations
   19845        with undeclared types
   19846      * [288]17976 Destructor is called twice
   19847      * [289]18020 rejects valid definition of enum value in template
   19848      * [290]18093 bogus conflict in namespace aliasing
   19849      * [291]18140 C++ parser bug when using >> in templates
   19850 
   19851     Fortran
   19852 
   19853      * [292]17541 data statements with double precision constants fail
   19854 
   19855     x86-specific
   19856 
   19857      * [293]17853 -O2 ICE for MMX testcase
   19858 
   19859     SPARC-specific
   19860 
   19861      * [294]17245 ICE compiling gsl-1.5 statistics/lag1.c
   19862 
   19863     Darwin-specific
   19864 
   19865      * [295]17167 FATAL:Symbol L_foo$stub already defined.
   19866 
   19867     AIX-specific
   19868 
   19869      * [296]17277 could not catch an exception when specified -maix64
   19870 
   19871     Solaris-specific
   19872 
   19873      * [297]17505 <cmath> calls acosf(), ceilf(), and other functions
   19874        missing from system libraries
   19875 
   19876     HP/UX specific:
   19877 
   19878      * [298]17684 /usr/ccs/bin/ld: Can't create libgcc_s.sl
   19879 
   19880     ARM-specific
   19881 
   19882      * [299]17384 ICE with mode attribute on structures
   19883 
   19884     MIPS-specific
   19885 
   19886      * [300]17770 No NOP after LWL with -mips1
   19887 
   19888     Other embedded target specific
   19889 
   19890      * [301]11476 [arc-elf] gcc ICE on newlib's vfprintf.c
   19891      * [302]14064 [avr-elf] -fdata-sections triggers ICE
   19892      * [303]14678 [m68hc11-elf] gcc ICE
   19893      * [304]15583 [powerpc-rtems] powerpc-rtems lacks __USE_INIT_FINI__
   19894      * [305]15790 [i686-coff] Alignment error building gcc with i686-coff
   19895        target
   19896      * [306]15886 [SH] Miscompilation with -O2 -fPIC
   19897      * [307]16884 [avr-elf] [fweb related] bug while initializing
   19898        variables
   19899 
   19900     Bugs relating to debugger support
   19901 
   19902      * [308]13841 missing debug info for _Complex function arguments
   19903      * [309]15860 [big-endian targets] No DW_AT_location debug info is
   19904        emitted for formal arguments to a function that uses "register"
   19905        qualifiers
   19906 
   19907     Testsuite issues (compiler not affected)
   19908 
   19909      * [310]17465 Testsuite in libffi overrides LD_LIBRARY_PATH
   19910      * [311]17469 Testsuite in libstdc++ overrides LD_LIBRARY_PATH
   19911      * [312]18138 [mips-sgi-irix6.5] libgcc_s.so.1 not found by 64-bit
   19912        testsuite
   19913 
   19914     Documentation
   19915 
   19916      * [313]15498 typo in gcc manual: non-existing locale example en_UK,
   19917        should be en_GB
   19918      * [314]15747 [mips-sgi-irix5.3] /bin/sh hangs during bootstrap:
   19919        document broken shell
   19920      * [315]16406 USE_LD_AS_NEEDED undocumented
   19921      __________________________________________________________________
   19922 
   19923 [316]GCC 3.4.4
   19924 
   19925    This is the [317]list of problem reports (PRs) from GCC's bug tracking
   19926    system that are known to be fixed in the 3.4.4 release. This list might
   19927    not be complete (that is, it is possible that some PRs that have been
   19928    fixed are not listed here).
   19929      __________________________________________________________________
   19930 
   19931 [318]GCC 3.4.5
   19932 
   19933    This is the [319]list of problem reports (PRs) from GCC's bug tracking
   19934    system that are known to be fixed in the 3.4.5 release. This list might
   19935    not be complete (that is, it is possible that some PRs that have been
   19936    fixed are not listed here).
   19937 
   19938     Bootstrap issues
   19939 
   19940      * [320]24688 sco_math fixincl breaks math.h
   19941 
   19942     C compiler bugs
   19943 
   19944      * [321]17188 struct Foo { } redefinition
   19945      * [322]20187 wrong code for ((unsigned char)(unsigned long
   19946        long)((a?a:1)&(a*b)))?0:1)
   19947      * [323]21873 infinite warning loop on bad array initializer
   19948      * [324]21899 enum definition accepts values to be overriden
   19949      * [325]22061 ICE in find_function_data, in function.c
   19950      * [326]22308 Failure to diagnose violation of constraint 6.516p2
   19951      * [327]22458 ICE on missing brace
   19952      * [328]22589 ICE casting to long long
   19953      * [329]24101 Segfault with preprocessed source
   19954 
   19955     C++ compiler and library bugs
   19956 
   19957      * [330]10611 operations on vector mode not recognized in C++
   19958      * [331]13377 unexpected behavior of namespace usage directive
   19959      * [332]16002 Strange error message with new parser
   19960      * [333]17413 local classes as template argument
   19961      * [334]17609 spurious error message after using keyword
   19962      * [335]17618 ICE in cp_convert_to_pointer, in cp/cvt.c
   19963      * [336]18124 ICE with invalid template template parameter
   19964      * [337]18155 typedef in template declaration not rejected
   19965      * [338]18177 ICE with const_cast for undeclared variable
   19966      * [339]18368 C++ error message regression
   19967      * [340]16378 ICE when returning a copy of a packed member
   19968      * [341]18466 int ::i; accepted
   19969      * [342]18512 ICE on invalid usage of template base class
   19970      * [343]18454 ICE when returning undefined type
   19971      * [344]18738 typename not allowed with non-dependent qualified name
   19972      * [345]18803 rejects access to operator() in template
   19973      * [346]19004 ICE in uses_template_parms, in cp/pt.c
   19974      * [347]19208 Spurious error about variably modified type
   19975      * [348]18253 bad error message / ICE for invalid template parameter
   19976      * [349]19608 ICE after friend function definition in local class
   19977      * [350]19884 ICE on explicit instantiation of a non-template
   19978        constructor
   19979      * [351]20153 ICE when C++ template function contains anonymous union
   19980      * [352]20563 Infinite loop in diagnostic (and ice after error
   19981        message)
   19982      * [353]20789 ICE with incomplete type in template
   19983      * [354]21336 Internal compiler error when using custom new operators
   19984      * [355]21768 ICE in error message due to violation of coding
   19985        conventions
   19986      * [356]21853 constness of pointer to data member ignored
   19987      * [357]21903 Default argument of template function causes a
   19988        compile-time error
   19989      * [358]21983 multiple diagnostics
   19990      * [359]21987 New testsuite failure
   19991        g++.dg/warn/conversion-function-1.C
   19992      * [360]22153 ICE on invalid template specialization
   19993      * [361]22172 Internal compiler error, seg fault.
   19994      * [362]21286 filebuf::xsgetn vs pipes
   19995      * [363]22233 ICE with wrong number of template parameters
   19996      * [364]22508 ICE after invalid operator new
   19997      * [365]22545 ICE with pointer to class member & user defined
   19998        conversion operator
   19999      * [366]23528 Wrong default allocator in ext/hash_map
   20000      * [367]23550 char_traits requirements/1.cc test bad math
   20001      * [368]23586 Bad diagnostic for invalid namespace-name
   20002      * [369]23624 ICE in invert_truthvalue, in fold-const.c
   20003      * [370]23639 Bad error message: not a member of '<declaration error>'
   20004      * [371]23797 ICE on typename outside template
   20005      * [372]23965 Bogus error message: no matching function for call to
   20006        'foo(<type error>)'
   20007      * [373]24052 &#`label_decl' not supported by dump_expr#<expression
   20008        error>
   20009      * [374]24580 virtual base class cause exception not to be caught
   20010 
   20011     Problems in generated debug information
   20012 
   20013      * [375]24267 Bad DWARF for altivec vectors
   20014 
   20015     Optimizations issues
   20016 
   20017      * [376]17810 ICE in verify_local_live_at_start
   20018      * [377]17860 Wrong generated code for loop with varying bound
   20019      * [378]21709 ICE on compile-time complex NaN
   20020      * [379]21964 broken tail call at -O2 or more
   20021      * [380]22167 Strange optimization bug when using -Os
   20022      * [381]22619 Compilation failure for real_const_1.f and
   20023        real_const_2.f90
   20024      * [382]23241 Invalid code generated for comparison of uchar to 255
   20025      * [383]23478 Miscompilation due to reloading of a var that is also
   20026        used in EH pad
   20027      * [384]24470 segmentation fault in cc1plus when compiling with -O
   20028      * [385]24950 ICE in operand_subword_force
   20029 
   20030     Precompiled headers problems
   20031 
   20032      * [386]14400 Cannot compile qt-x11-free-3.3.0
   20033      * [387]14940 PCH largefile test fails on various platforms
   20034 
   20035     Preprocessor bugs
   20036 
   20037      * [388]20239 ICE on empty preprocessed input
   20038      * [389]15220 "gcc -E -MM -MG" reports missing system headers in
   20039        source directory
   20040 
   20041     Testsuite issues
   20042 
   20043      * [390]19275 gcc.dg/20020919-1.c fails with -fpic/-fPIC on
   20044        i686-pc-linux-gnu
   20045 
   20046     Alpha specific
   20047 
   20048      * [391]21888 bootstrap failure with linker relaxation enabled
   20049 
   20050     ARM specific
   20051 
   20052      * [392]15342 [arm-linux]: ICE in verify_local_live_at_start
   20053      * [393]23985 Memory aliasing information incorrect in inlined memcpy
   20054 
   20055     ColdFile specific
   20056 
   20057      * [394]16719 Illegal move of byte into address register causes
   20058        compiler to ICE
   20059 
   20060     HPPA specific
   20061 
   20062      * [395]21723 ICE while building libgfortran
   20063      * [396]21841 -mhp-ld/-mgnu-ld documentation
   20064 
   20065     IA-64 specific
   20066 
   20067      * [397]23644 IA-64 hardware models and configuration options
   20068        documentation error
   20069      * [398]24718 Shared libgcc not used for linking by default
   20070 
   20071     M68000 specific
   20072 
   20073      * [399]18421 ICE in reload_cse_simplify_operands, in postreload.c
   20074 
   20075     MIPS specific
   20076 
   20077      * [400]20621 ICE in change_address_1, in emit-rtl.c
   20078 
   20079     PowerPC and PowerPC64 specific
   20080 
   20081      * [401]18583 error on valid code: const
   20082        __attribute__((altivec(vector__))) doesn't work in arrays
   20083      * [402]20191 ICE in reload_cse_simplify_operands
   20084      * [403]22083 AIX: TARGET_C99_FUNCTIONS is wrongly defined
   20085      * [404]23070 CALL_V4_CLEAR_FP_ARGS flag not properly set
   20086      * [405]23404 gij trashes args of functions with more than 8 fp args
   20087      * [406]23539 C & C++ compiler generating misaligned references
   20088        regardless of compiler flags
   20089      * [407]24102 floatdisf2_internal2 broken
   20090      * [408]24465 -mminimal-toc miscompilation of __thread vars
   20091 
   20092     Solaris specific
   20093 
   20094      * [409]19933 Problem with define of HUGE_VAL in math_c99
   20095      * [410]21889 Native Solaris assembler cannot grok DTP-relative debug
   20096        symbols
   20097 
   20098     SPARC specific
   20099 
   20100      * [411]19300 PCH failures on sparc-linux
   20101      * [412]20301 Assembler labels have a leading "-"
   20102      * [413]20673 C PCH testsuite assembly comparison failure
   20103 
   20104     x86 and x86_64 specific
   20105 
   20106      * [414]18582 ICE with arrays of type V2DF
   20107      * [415]19340 Compilation SEGFAULTs with -O1 -fschedule-insns2
   20108        -fsched2-use-traces
   20109      * [416]21716 ICE in reg-stack.c's swap_rtx_condition
   20110      * [417]24315 amd64 fails -fpeephole2
   20111      __________________________________________________________________
   20112 
   20113 [418]GCC 3.4.6
   20114 
   20115    This is the [419]list of problem reports (PRs) from GCC's bug tracking
   20116    system that are known to be fixed in the 3.4.6 release. This list might
   20117    not be complete (that is, it is possible that some PRs that have been
   20118    fixed are not listed here).
   20119 
   20120 
   20121     For questions related to the use of GCC, please consult these web
   20122     pages and the [420]GCC manuals. If that fails, the
   20123     [421]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   20124     web pages and the development of GCC are welcome on our developer
   20125     list at [422]gcc (a] gcc.gnu.org. All of [423]our lists have public
   20126     archives.
   20127 
   20128    Copyright (C) [424]Free Software Foundation, Inc. Verbatim copying and
   20129    distribution of this entire article is permitted in any medium,
   20130    provided this notice is preserved.
   20131 
   20132    These pages are [425]maintained by the GCC team. Last modified
   20133    2025-01-31.
   20134 
   20135 References
   20136 
   20137    1. https://gcc.gnu.org/gcc-3.4/changes.html#3.4.6
   20138    2. https://gcc.gnu.org/gcc-3.4/changes.html#cplusplus
   20139    3. https://gcc.gnu.org/gcc-3.3/changes.html#obsolete_systems
   20140    4. https://gcc.gnu.org/gcc-3.4/changes.html#obsolete_systems
   20141    5. https://gcc.gnu.org/gcc-3.4/mips-abi.html
   20142    6. https://gcc.gnu.org/gcc-3.4/sparc-abi.html
   20143    7. https://www.boost.org/
   20144    8. https://gcc.gnu.org/PR11953
   20145    9. https://gcc.gnu.org/PR8361
   20146   10. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Other-Builtins.html#Other%20Builtins
   20147   11. https://gcc.gnu.org/gcc-3.4/changes.html#cplusplus
   20148   12. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_closed.html#209
   20149   13. https://gcc.gnu.org/bugs/#cxx_rvalbind
   20150   14. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Objective-C-Dialect-Options.html
   20151   15. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Objective-C-Dialect-Options.html
   20152   16. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Objective-C-Dialect-Options.html
   20153   17. https://www.gnu.org/software/classpath/
   20154   18. https://www.eclipse.org/
   20155   19. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/g77/News.html
   20156   20. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Alpha-Built-in-Functions.html
   20157   21. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gccint/Processor-pipeline-description.html
   20158   22. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gccint/Comparison-of-the-two-descriptions.html
   20159   23. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gccint/Processor-pipeline-description.html
   20160   24. https://gcc.gnu.org/gcc-3.4/mips-abi.html
   20161   25. https://gcc.gnu.org/gcc-3.4/powerpc-abi.html
   20162   26. https://gcc.gnu.org/gcc-3.4/sparc-abi.html
   20163   27. https://gcc.gnu.org/gcc-3.4/changes.html#obsolete_systems
   20164   28. https://gcc.gnu.org/gcc-3.4/changes.html#GCC3.4.0
   20165   29. https://gcc.gnu.org/bugzilla/buglist.cgi?short_desc_type=notregexp&short_desc=%5C%5B3%5C.4.*%5BRr%5Degression&target_milestone=3.4.0&bug_status=RESOLVED&resolution=FIXED
   20166   30. https://gcc.gnu.org/gcc-3.4/changes.html#GCC3.4.1
   20167   31. https://gcc.gnu.org/PR10129
   20168   32. https://gcc.gnu.org/PR14576
   20169   33. https://gcc.gnu.org/PR14760
   20170   34. https://gcc.gnu.org/PR14671
   20171   35. https://gcc.gnu.org/PR15093
   20172   36. https://gcc.gnu.org/PR15178
   20173   37. https://gcc.gnu.org/PR12753
   20174   38. https://gcc.gnu.org/PR13985
   20175   39. https://gcc.gnu.org/PR14810
   20176   40. https://gcc.gnu.org/PR14883
   20177   41. https://gcc.gnu.org/PR15044
   20178   42. https://gcc.gnu.org/PR15057
   20179   43. https://gcc.gnu.org/PR15064
   20180   44. https://gcc.gnu.org/PR15142
   20181   45. https://gcc.gnu.org/PR15159
   20182   46. https://gcc.gnu.org/PR15165
   20183   47. https://gcc.gnu.org/PR15193
   20184   48. https://gcc.gnu.org/PR15209
   20185   49. https://gcc.gnu.org/PR15227
   20186   50. https://gcc.gnu.org/PR15285
   20187   51. https://gcc.gnu.org/PR15299
   20188   52. https://gcc.gnu.org/PR15329
   20189   53. https://gcc.gnu.org/PR15550
   20190   54. https://gcc.gnu.org/PR15554
   20191   55. https://gcc.gnu.org/PR15640
   20192   56. https://gcc.gnu.org/PR15666
   20193   57. https://gcc.gnu.org/PR15696
   20194   58. https://gcc.gnu.org/PR15701
   20195   59. https://gcc.gnu.org/PR15761
   20196   60. https://gcc.gnu.org/PR15829
   20197   61. https://gcc.gnu.org/PR14538
   20198   62. https://gcc.gnu.org/PR12391
   20199   63. https://gcc.gnu.org/PR14649
   20200   64. https://gcc.gnu.org/PR15004
   20201   65. https://gcc.gnu.org/PR15749
   20202   66. https://gcc.gnu.org/PR10646
   20203   67. https://gcc.gnu.org/PR12077
   20204   68. https://gcc.gnu.org/PR13598
   20205   69. https://gcc.gnu.org/PR14211
   20206   70. https://gcc.gnu.org/PR14220
   20207   71. https://gcc.gnu.org/PR14245
   20208   72. https://gcc.gnu.org/PR14340
   20209   73. https://gcc.gnu.org/PR14600
   20210   74. https://gcc.gnu.org/PR14668
   20211   75. https://gcc.gnu.org/PR14775
   20212   76. https://gcc.gnu.org/PR14821
   20213   77. https://gcc.gnu.org/PR14930
   20214   78. https://gcc.gnu.org/PR14932
   20215   79. https://gcc.gnu.org/PR14950
   20216   80. https://gcc.gnu.org/PR14962
   20217   81. https://gcc.gnu.org/PR14975
   20218   82. https://gcc.gnu.org/PR15002
   20219   83. https://gcc.gnu.org/PR15025
   20220   84. https://gcc.gnu.org/PR15046
   20221   85. https://gcc.gnu.org/PR15069
   20222   86. https://gcc.gnu.org/PR15074
   20223   87. https://gcc.gnu.org/PR15083
   20224   88. https://gcc.gnu.org/PR15096
   20225   89. https://gcc.gnu.org/PR15287
   20226   90. https://gcc.gnu.org/PR15317
   20227   91. https://gcc.gnu.org/PR15337
   20228   92. https://gcc.gnu.org/PR15361
   20229   93. https://gcc.gnu.org/PR15412
   20230   94. https://gcc.gnu.org/PR15427
   20231   95. https://gcc.gnu.org/PR15471
   20232   96. https://gcc.gnu.org/PR15503
   20233   97. https://gcc.gnu.org/PR15507
   20234   98. https://gcc.gnu.org/PR15542
   20235   99. https://gcc.gnu.org/PR15565
   20236  100. https://gcc.gnu.org/PR15625
   20237  101. https://gcc.gnu.org/PR15629
   20238  102. https://gcc.gnu.org/PR15742
   20239  103. https://gcc.gnu.org/PR15775
   20240  104. https://gcc.gnu.org/PR15821
   20241  105. https://gcc.gnu.org/PR15862
   20242  106. https://gcc.gnu.org/PR15875
   20243  107. https://gcc.gnu.org/PR15877
   20244  108. https://gcc.gnu.org/PR15947
   20245  109. https://gcc.gnu.org/PR16020
   20246  110. https://gcc.gnu.org/PR16154
   20247  111. https://gcc.gnu.org/PR16174
   20248  112. https://gcc.gnu.org/PR14315
   20249  113. https://gcc.gnu.org/PR15151
   20250  114. https://gcc.gnu.org/PR7993
   20251  115. https://gcc.gnu.org/PR15228
   20252  116. https://gcc.gnu.org/PR15345
   20253  117. https://gcc.gnu.org/PR15945
   20254  118. https://gcc.gnu.org/PR15526
   20255  119. https://gcc.gnu.org/PR14690
   20256  120. https://gcc.gnu.org/PR15112
   20257  121. https://gcc.gnu.org/PR15067
   20258  122. https://gcc.gnu.org/PR1963
   20259  123. https://gcc.gnu.org/PR15717
   20260  124. https://gcc.gnu.org/PR14782
   20261  125. https://gcc.gnu.org/PR14828
   20262  126. https://gcc.gnu.org/PR15202
   20263  127. https://gcc.gnu.org/PR14610
   20264  128. https://gcc.gnu.org/PR14813
   20265  129. https://gcc.gnu.org/PR14857
   20266  130. https://gcc.gnu.org/PR15598
   20267  131. https://gcc.gnu.org/PR15653
   20268  132. https://gcc.gnu.org/PR15189
   20269  133. https://gcc.gnu.org/PR15331
   20270  134. https://gcc.gnu.org/PR16144
   20271  135. https://gcc.gnu.org/PR16176
   20272  136. https://gcc.gnu.org/PR11591
   20273  137. https://gcc.gnu.org/PR12028
   20274  138. https://gcc.gnu.org/PR14478
   20275  139. https://gcc.gnu.org/PR14567
   20276  140. https://gcc.gnu.org/PR14715
   20277  141. https://gcc.gnu.org/PR14902
   20278  142. https://gcc.gnu.org/PR14924
   20279  143. https://gcc.gnu.org/PR14960
   20280  144. https://gcc.gnu.org/PR15106
   20281  145. https://gcc.gnu.org/PR16026
   20282  146. https://gcc.gnu.org/PR15191
   20283  147. https://gcc.gnu.org/PR15662
   20284  148. https://gcc.gnu.org/PR15054
   20285  149. https://gcc.gnu.org/PR15783
   20286  150. https://gcc.gnu.org/PR15626
   20287  151. https://gcc.gnu.org/PR14326
   20288  152. https://gcc.gnu.org/PR14723
   20289  153. https://gcc.gnu.org/PR15290
   20290  154. https://gcc.gnu.org/PR15250
   20291  155. https://gcc.gnu.org/PR15551
   20292  156. https://gcc.gnu.org/PR8309
   20293  157. https://gcc.gnu.org/PR13250
   20294  158. https://gcc.gnu.org/PR13803
   20295  159. https://gcc.gnu.org/PR14093
   20296  160. https://gcc.gnu.org/PR14457
   20297  161. https://gcc.gnu.org/PR14542
   20298  162. https://gcc.gnu.org/PR15100
   20299  163. https://gcc.gnu.org/PR15296
   20300  164. https://gcc.gnu.org/PR15396
   20301  165. https://gcc.gnu.org/PR15782
   20302  166. https://gcc.gnu.org/PR11610
   20303  167. https://gcc.gnu.org/PR15488
   20304  168. https://gcc.gnu.org/PR15489
   20305  169. https://gcc.gnu.org/PR13928
   20306  170. https://gcc.gnu.org/PR14150
   20307  171. https://gcc.gnu.org/PR14949
   20308  172. https://gcc.gnu.org/PR15123
   20309  173. https://gcc.gnu.org/gcc-3.4/changes.html#GCC3.4.2
   20310  174. https://gcc.gnu.org/PR16469
   20311  175. https://gcc.gnu.org/PR16344
   20312  176. https://gcc.gnu.org/PR16842
   20313  177. https://gcc.gnu.org/PR12608
   20314  178. https://gcc.gnu.org/PR14492
   20315  179. https://gcc.gnu.org/PR15461
   20316  180. https://gcc.gnu.org/PR15890
   20317  181. https://gcc.gnu.org/PR16180
   20318  182. https://gcc.gnu.org/PR16224
   20319  183. https://gcc.gnu.org/PR16408
   20320  184. https://gcc.gnu.org/PR16529
   20321  185. https://gcc.gnu.org/PR16698
   20322  186. https://gcc.gnu.org/PR16706
   20323  187. https://gcc.gnu.org/PR16810
   20324  188. https://gcc.gnu.org/PR16851
   20325  189. https://gcc.gnu.org/PR16870
   20326  190. https://gcc.gnu.org/PR16904
   20327  191. https://gcc.gnu.org/PR16905
   20328  192. https://gcc.gnu.org/PR16964
   20329  193. https://gcc.gnu.org/PR17068
   20330  194. https://gcc.gnu.org/PR16366
   20331  195. https://gcc.gnu.org/PR15345
   20332  196. https://gcc.gnu.org/PR16590
   20333  197. https://gcc.gnu.org/PR16693
   20334  198. https://gcc.gnu.org/PR17078
   20335  199. https://gcc.gnu.org/PR13956
   20336  200. https://gcc.gnu.org/PR16684
   20337  201. https://gcc.gnu.org/PR12658
   20338  202. https://gcc.gnu.org/PR13092
   20339  203. https://gcc.gnu.org/PR15320
   20340  204. https://gcc.gnu.org/PR16246
   20341  205. https://gcc.gnu.org/PR16273
   20342  206. https://gcc.gnu.org/PR16401
   20343  207. https://gcc.gnu.org/PR16411
   20344  208. https://gcc.gnu.org/PR16489
   20345  209. https://gcc.gnu.org/PR16618
   20346  210. https://gcc.gnu.org/PR16637
   20347  211. https://gcc.gnu.org/PR16717
   20348  212. https://gcc.gnu.org/PR16813
   20349  213. https://gcc.gnu.org/PR16853
   20350  214. https://gcc.gnu.org/PR16889
   20351  215. https://gcc.gnu.org/PR16959
   20352  216. https://gcc.gnu.org/PR7587
   20353  217. https://gcc.gnu.org/PR16473
   20354  218. https://gcc.gnu.org/PR16478
   20355  219. https://gcc.gnu.org/PR10695
   20356  220. https://gcc.gnu.org/PR16974
   20357  221. https://gcc.gnu.org/PR16298
   20358  222. https://gcc.gnu.org/PR17113
   20359  223. https://gcc.gnu.org/PR14697
   20360  224. https://gcc.gnu.org/PR15869
   20361  225. https://gcc.gnu.org/PR16325
   20362  226. https://gcc.gnu.org/PR16357
   20363  227. https://gcc.gnu.org/PR16380
   20364  228. https://gcc.gnu.org/PR16407
   20365  229. https://gcc.gnu.org/PR16643
   20366  230. https://gcc.gnu.org/PR15927
   20367  231. https://gcc.gnu.org/PR15948
   20368  232. https://gcc.gnu.org/PR17019
   20369  233. https://gcc.gnu.org/PR16130
   20370  234. https://gcc.gnu.org/PR16142
   20371  235. https://gcc.gnu.org/PR16278
   20372  236. https://gcc.gnu.org/PR16414
   20373  237. https://gcc.gnu.org/PR16445
   20374  238. https://gcc.gnu.org/PR16490
   20375  239. https://gcc.gnu.org/PR16683
   20376  240. https://gcc.gnu.org/PR16195
   20377  241. https://gcc.gnu.org/PR16239
   20378  242. https://gcc.gnu.org/PR16199
   20379  243. https://gcc.gnu.org/PR16416
   20380  244. https://gcc.gnu.org/PR16430
   20381  245. https://gcc.gnu.org/PR16379
   20382  246. https://gcc.gnu.org/PR17093
   20383  247. https://gcc.gnu.org/PR17119
   20384  248. https://gcc.gnu.org/PR15928
   20385  249. https://gcc.gnu.org/PR16210
   20386  250. https://gcc.gnu.org/PR15488
   20387  251. https://gcc.gnu.org/PR16250
   20388  252. https://gcc.gnu.org/gcc-3.4/changes.html#GCC3.4.3
   20389  253. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.4.3
   20390  254. https://gcc.gnu.org/PR17369
   20391  255. https://gcc.gnu.org/PR17850
   20392  256. https://gcc.gnu.org/PR13948
   20393  257. https://gcc.gnu.org/PR14492
   20394  258. https://gcc.gnu.org/PR16301
   20395  259. https://gcc.gnu.org/PR16566
   20396  260. https://gcc.gnu.org/PR17023
   20397  261. https://gcc.gnu.org/PR17027
   20398  262. https://gcc.gnu.org/PR17524
   20399  263. https://gcc.gnu.org/PR17826
   20400  264. https://gcc.gnu.org/PR15526
   20401  265. https://gcc.gnu.org/PR16999
   20402  266. https://gcc.gnu.org/PR17503
   20403  267. https://gcc.gnu.org/PR17581
   20404  268. https://gcc.gnu.org/PR18129
   20405  269. https://gcc.gnu.org/PR10975
   20406  270. https://gcc.gnu.org/PR11722
   20407  271. https://gcc.gnu.org/PR14534
   20408  272. https://gcc.gnu.org/PR15172
   20409  273. https://gcc.gnu.org/PR15786
   20410  274. https://gcc.gnu.org/PR16162
   20411  275. https://gcc.gnu.org/PR16612
   20412  276. https://gcc.gnu.org/PR16715
   20413  277. https://gcc.gnu.org/PR16848
   20414  278. https://gcc.gnu.org/PR17132
   20415  279. https://gcc.gnu.org/PR17259
   20416  280. https://gcc.gnu.org/PR17327
   20417  281. https://gcc.gnu.org/PR17393
   20418  282. https://gcc.gnu.org/PR17501
   20419  283. https://gcc.gnu.org/PR17537
   20420  284. https://gcc.gnu.org/PR17585
   20421  285. https://gcc.gnu.org/PR17821
   20422  286. https://gcc.gnu.org/PR17829
   20423  287. https://gcc.gnu.org/PR17851
   20424  288. https://gcc.gnu.org/PR17976
   20425  289. https://gcc.gnu.org/PR18020
   20426  290. https://gcc.gnu.org/PR18093
   20427  291. https://gcc.gnu.org/PR18140
   20428  292. https://gcc.gnu.org/PR17541
   20429  293. https://gcc.gnu.org/PR17853
   20430  294. https://gcc.gnu.org/PR17245
   20431  295. https://gcc.gnu.org/PR17167
   20432  296. https://gcc.gnu.org/PR17277
   20433  297. https://gcc.gnu.org/PR17505
   20434  298. https://gcc.gnu.org/PR17684
   20435  299. https://gcc.gnu.org/PR17384
   20436  300. https://gcc.gnu.org/PR17770
   20437  301. https://gcc.gnu.org/PR11476
   20438  302. https://gcc.gnu.org/PR14064
   20439  303. https://gcc.gnu.org/PR14678
   20440  304. https://gcc.gnu.org/PR15583
   20441  305. https://gcc.gnu.org/PR15790
   20442  306. https://gcc.gnu.org/PR15886
   20443  307. https://gcc.gnu.org/PR16884
   20444  308. https://gcc.gnu.org/PR13841
   20445  309. https://gcc.gnu.org/PR15860
   20446  310. https://gcc.gnu.org/PR17465
   20447  311. https://gcc.gnu.org/PR17469
   20448  312. https://gcc.gnu.org/PR18138
   20449  313. https://gcc.gnu.org/PR15498
   20450  314. https://gcc.gnu.org/PR15747
   20451  315. https://gcc.gnu.org/PR16406
   20452  316. https://gcc.gnu.org/gcc-3.4/changes.html#GCC3.4.4
   20453  317. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.4.4
   20454  318. https://gcc.gnu.org/gcc-3.4/changes.html#GCC3.4.5
   20455  319. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.4.5
   20456  320. https://gcc.gnu.org/PR24688
   20457  321. https://gcc.gnu.org/PR17188
   20458  322. https://gcc.gnu.org/PR20187
   20459  323. https://gcc.gnu.org/PR21873
   20460  324. https://gcc.gnu.org/PR21899
   20461  325. https://gcc.gnu.org/PR22061
   20462  326. https://gcc.gnu.org/PR22208
   20463  327. https://gcc.gnu.org/PR22458
   20464  328. https://gcc.gnu.org/PR22589
   20465  329. https://gcc.gnu.org/PR24101
   20466  330. https://gcc.gnu.org/PR10611
   20467  331. https://gcc.gnu.org/PR13377
   20468  332. https://gcc.gnu.org/PR16002
   20469  333. https://gcc.gnu.org/PR17413
   20470  334. https://gcc.gnu.org/PR17609
   20471  335. https://gcc.gnu.org/PR17618
   20472  336. https://gcc.gnu.org/PR18124
   20473  337. https://gcc.gnu.org/PR18155
   20474  338. https://gcc.gnu.org/PR18177
   20475  339. https://gcc.gnu.org/PR18368
   20476  340. https://gcc.gnu.org/PR18378
   20477  341. https://gcc.gnu.org/PR18466
   20478  342. https://gcc.gnu.org/PR18512
   20479  343. https://gcc.gnu.org/PR18545
   20480  344. https://gcc.gnu.org/PR18738
   20481  345. https://gcc.gnu.org/PR18803
   20482  346. https://gcc.gnu.org/PR19004
   20483  347. https://gcc.gnu.org/PR19208
   20484  348. https://gcc.gnu.org/PR19253
   20485  349. https://gcc.gnu.org/PR19608
   20486  350. https://gcc.gnu.org/PR19884
   20487  351. https://gcc.gnu.org/PR20153
   20488  352. https://gcc.gnu.org/PR20563
   20489  353. https://gcc.gnu.org/PR20789
   20490  354. https://gcc.gnu.org/PR21336
   20491  355. https://gcc.gnu.org/PR21768
   20492  356. https://gcc.gnu.org/PR21853
   20493  357. https://gcc.gnu.org/PR21903
   20494  358. https://gcc.gnu.org/PR21983
   20495  359. https://gcc.gnu.org/PR21987
   20496  360. https://gcc.gnu.org/PR22153
   20497  361. https://gcc.gnu.org/PR22172
   20498  362. https://gcc.gnu.org/PR21286
   20499  363. https://gcc.gnu.org/PR22233
   20500  364. https://gcc.gnu.org/PR22508
   20501  365. https://gcc.gnu.org/PR22545
   20502  366. https://gcc.gnu.org/PR23528
   20503  367. https://gcc.gnu.org/PR23550
   20504  368. https://gcc.gnu.org/PR23586
   20505  369. https://gcc.gnu.org/PR23624
   20506  370. https://gcc.gnu.org/PR23639
   20507  371. https://gcc.gnu.org/PR23797
   20508  372. https://gcc.gnu.org/PR23965
   20509  373. https://gcc.gnu.org/PR24052
   20510  374. https://gcc.gnu.org/PR24580
   20511  375. https://gcc.gnu.org/PR24267
   20512  376. https://gcc.gnu.org/PR17810
   20513  377. https://gcc.gnu.org/PR17860
   20514  378. https://gcc.gnu.org/PR21709
   20515  379. https://gcc.gnu.org/PR21964
   20516  380. https://gcc.gnu.org/PR22167
   20517  381. https://gcc.gnu.org/PR22619
   20518  382. https://gcc.gnu.org/PR23241
   20519  383. https://gcc.gnu.org/PR23478
   20520  384. https://gcc.gnu.org/PR24470
   20521  385. https://gcc.gnu.org/PR24950
   20522  386. https://gcc.gnu.org/PR14400
   20523  387. https://gcc.gnu.org/PR14940
   20524  388. https://gcc.gnu.org/PR20239
   20525  389. https://gcc.gnu.org/PR15220
   20526  390. https://gcc.gnu.org/PR19275
   20527  391. https://gcc.gnu.org/PR21888
   20528  392. https://gcc.gnu.org/PR15342
   20529  393. https://gcc.gnu.org/PR23985
   20530  394. https://gcc.gnu.org/PR16719
   20531  395. https://gcc.gnu.org/PR21723
   20532  396. https://gcc.gnu.org/PR21841
   20533  397. https://gcc.gnu.org/PR23644
   20534  398. https://gcc.gnu.org/PR24718
   20535  399. https://gcc.gnu.org/PR18421
   20536  400. https://gcc.gnu.org/PR20621
   20537  401. https://gcc.gnu.org/PR18583
   20538  402. https://gcc.gnu.org/PR20191
   20539  403. https://gcc.gnu.org/PR22083
   20540  404. https://gcc.gnu.org/PR23070
   20541  405. https://gcc.gnu.org/PR23404
   20542  406. https://gcc.gnu.org/PR23539
   20543  407. https://gcc.gnu.org/PR24102
   20544  408. https://gcc.gnu.org/PR24465
   20545  409. https://gcc.gnu.org/PR19933
   20546  410. https://gcc.gnu.org/PR21889
   20547  411. https://gcc.gnu.org/PR19300
   20548  412. https://gcc.gnu.org/PR20301
   20549  413. https://gcc.gnu.org/PR20673
   20550  414. https://gcc.gnu.org/PR18582
   20551  415. https://gcc.gnu.org/PR19340
   20552  416. https://gcc.gnu.org/PR21716
   20553  417. https://gcc.gnu.org/PR24315
   20554  418. https://gcc.gnu.org/gcc-3.4/changes.html#GCC3.4.6
   20555  419. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.4.6
   20556  420. https://gcc.gnu.org/onlinedocs/
   20557  421. mailto:gcc-help (a] gcc.gnu.org
   20558  422. mailto:gcc (a] gcc.gnu.org
   20559  423. https://gcc.gnu.org/lists.html
   20560  424. https://www.fsf.org/
   20561  425. https://gcc.gnu.org/about.html
   20562 ======================================================================
   20563 http://gcc.gnu.org/gcc-3.3/index.html
   20564 
   20565                              GCC 3.3 Release Series
   20566 
   20567    (This release series is no longer supported.)
   20568 
   20569    May 03, 2005
   20570 
   20571    The [1]GNU project and the GCC developers are pleased to announce the
   20572    release of GCC 3.3.6.
   20573 
   20574    This release is a bug-fix release, containing fixes for regressions in
   20575    GCC 3.3.5 relative to previous releases of GCC.
   20576 
   20577    This release is the last of the series 3.3.x.
   20578 
   20579    The GCC 3.3 release series includes numerous [2]new features,
   20580    improvements, bug fixes, and other changes, thanks to an [3]amazing
   20581    group of volunteers.
   20582 
   20583 Release History
   20584 
   20585    GCC 3.3.6
   20586           May 3, 2005 ([4]changes)
   20587 
   20588    GCC 3.3.5
   20589           September 30, 2004 ([5]changes)
   20590 
   20591    GCC 3.3.4
   20592           May 31, 2004 ([6]changes)
   20593 
   20594    GCC 3.3.3
   20595           February 14, 2004 ([7]changes)
   20596 
   20597    GCC 3.3.2
   20598           October 16, 2003 ([8]changes)
   20599 
   20600    GCC 3.3.1
   20601           August 8, 2003 ([9]changes)
   20602 
   20603    GCC 3.3
   20604           May 14, 2003 ([10]changes)
   20605 
   20606 References and Acknowledgements
   20607 
   20608    GCC used to stand for the GNU C Compiler, but since the compiler
   20609    supports several other languages aside from C, it now stands for the
   20610    GNU Compiler Collection.
   20611 
   20612    A list of [11]successful builds is updated as new information becomes
   20613    available.
   20614 
   20615    The GCC developers would like to thank the numerous people that have
   20616    contributed new features, improvements, bug fixes, and other changes as
   20617    well as test results to GCC. This [12]amazing group of volunteers is
   20618    what makes GCC successful.
   20619 
   20620    For additional information about GCC please refer to the [13]GCC
   20621    project web site or contact the [14]GCC development mailing list.
   20622 
   20623    To obtain GCC please use [15]our mirror sites, or our CVS server.
   20624 
   20625 
   20626     For questions related to the use of GCC, please consult these web
   20627     pages and the [16]GCC manuals. If that fails, the
   20628     [17]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   20629     web pages and the development of GCC are welcome on our developer
   20630     list at [18]gcc (a] gcc.gnu.org. All of [19]our lists have public
   20631     archives.
   20632 
   20633    Copyright (C) [20]Free Software Foundation, Inc. Verbatim copying and
   20634    distribution of this entire article is permitted in any medium,
   20635    provided this notice is preserved.
   20636 
   20637    These pages are [21]maintained by the GCC team. Last modified
   20638    2022-10-26.
   20639 
   20640 References
   20641 
   20642    1. http://www.gnu.org/
   20643    2. https://gcc.gnu.org/gcc-3.3/changes.html
   20644    3. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   20645    4. https://gcc.gnu.org/gcc-3.3/changes.html#3.3.6
   20646    5. https://gcc.gnu.org/gcc-3.3/changes.html#3.3.5
   20647    6. https://gcc.gnu.org/gcc-3.3/changes.html#3.3.4
   20648    7. https://gcc.gnu.org/gcc-3.3/changes.html#3.3.3
   20649    8. https://gcc.gnu.org/gcc-3.3/changes.html#3.3.2
   20650    9. https://gcc.gnu.org/gcc-3.3/changes.html#3.3.1
   20651   10. https://gcc.gnu.org/gcc-3.3/changes.html
   20652   11. https://gcc.gnu.org/gcc-3.3/buildstat.html
   20653   12. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   20654   13. https://gcc.gnu.org/index.html
   20655   14. mailto:gcc (a] gcc.gnu.org
   20656   15. https://gcc.gnu.org/mirrors.html
   20657   16. https://gcc.gnu.org/onlinedocs/
   20658   17. mailto:gcc-help (a] gcc.gnu.org
   20659   18. mailto:gcc (a] gcc.gnu.org
   20660   19. https://gcc.gnu.org/lists.html
   20661   20. https://www.fsf.org/
   20662   21. https://gcc.gnu.org/about.html
   20663 ======================================================================
   20664 http://gcc.gnu.org/gcc-3.3/changes.html
   20665 
   20666                              GCC 3.3 Release Series
   20667                         Changes, New Features, and Fixes
   20668 
   20669    The latest release in the 3.3 release series is [1]GCC 3.3.6.
   20670 
   20671 Caveats
   20672 
   20673      * The preprocessor no longer accepts multi-line string literals. They
   20674        were deprecated in 3.0, 3.1, and 3.2.
   20675      * The preprocessor no longer supports the -A- switch when appearing
   20676        alone. -A- followed by an assertion is still supported.
   20677      * Support for all the systems [2]obsoleted in GCC 3.1 has been
   20678        removed from GCC 3.3. See below for a [3]list of systems which are
   20679        obsoleted in this release.
   20680      * Checking for null format arguments has been decoupled from the rest
   20681        of the format checking mechanism. Programs which use the format
   20682        attribute may regain this functionality by using the new [4]nonnull
   20683        function attribute. Note that all functions for which GCC has a
   20684        built-in format attribute, an appropriate built-in nonnull
   20685        attribute is also applied.
   20686      * The DWARF (version 1) debugging format has been deprecated and will
   20687        be removed in a future version of GCC. Version 2 of the DWARF
   20688        debugging format will continue to be supported for the foreseeable
   20689        future.
   20690      * The C and Objective-C compilers no longer accept the "Naming Types"
   20691        extension (typedef foo = bar); it was already unavailable in C++.
   20692        Code which uses it will need to be changed to use the "typeof"
   20693        extension instead: typedef typeof(bar) foo. (We have removed this
   20694        extension without a period of deprecation because it has caused the
   20695        compiler to crash since version 3.0 and no one noticed until very
   20696        recently. Thus we conclude it is not in widespread use.)
   20697      * The -traditional C compiler option has been removed. It was
   20698        deprecated in 3.1 and 3.2. (Traditional preprocessing remains
   20699        available.) The <varargs.h> header, used for writing variadic
   20700        functions in traditional C, still exists but will produce an error
   20701        message if used.
   20702      * GCC 3.3.1 automatically places zero-initialized variables in the
   20703        .bss section on some operating systems. Versions of GNU Emacs up to
   20704        (and including) 21.3 will not work correctly when using this
   20705        optimization; you can use -fno-zero-initialized-in-bss to disable
   20706        it.
   20707 
   20708 General Optimizer Improvements
   20709 
   20710      * A new scheme for accurately describing processor pipelines, the
   20711        [5]DFA scheduler, has been added.
   20712      * Pavel Nejedly, Charles University Prague, has contributed new file
   20713        format used by the edge coverage profiler (-fprofile-arcs).
   20714        The new format is robust and diagnoses common mistakes where
   20715        profiles from different versions (or compilations) of the program
   20716        are combined resulting in nonsensical profiles and slow code to
   20717        produced with profile feedback. Additionally this format allows
   20718        extra data to be gathered. Currently, overall statistics are
   20719        produced helping optimizers to identify hot spots of a program
   20720        globally replacing the old intra-procedural scheme and resulting in
   20721        better code. Note that the gcov tool from older GCC versions will
   20722        not be able to parse the profiles generated by GCC 3.3 and vice
   20723        versa.
   20724      * Jan Hubicka, SuSE Labs, has contributed a new superblock formation
   20725        pass enabled using -ftracer. This pass simplifies the control flow
   20726        of functions allowing other optimizations to do better job.
   20727        He also contributed the function reordering pass
   20728        (-freorder-functions) to optimize function placement using profile
   20729        feedback.
   20730 
   20731 New Languages and Language specific improvements
   20732 
   20733   C/ObjC/C++
   20734 
   20735      * The preprocessor now accepts directives within macro arguments. It
   20736        processes them just as if they had not been within macro arguments.
   20737      * The separate ISO and traditional preprocessors have been completely
   20738        removed. The front end handles either type of preprocessed output
   20739        if necessary.
   20740      * In C99 mode preprocessor arithmetic is done in the precision of the
   20741        target's intmax_t, as required by that standard.
   20742      * The preprocessor can now copy comments inside macros to the output
   20743        file when the macro is expanded. This feature, enabled using the
   20744        -CC option, is intended for use by applications which place
   20745        metadata or directives inside comments, such as lint.
   20746      * The method of constructing the list of directories to be searched
   20747        for header files has been revised. If a directory named by a -I
   20748        option is a standard system include directory, the option is
   20749        ignored to ensure that the default search order for system
   20750        directories and the special treatment of system header files are
   20751        not defeated.
   20752      * A few more [6]ISO C99 features now work correctly.
   20753      * A new function attribute, nonnull, has been added which allows
   20754        pointer arguments to functions to be specified as requiring a
   20755        non-null value. The compiler currently uses this information to
   20756        issue a warning when it detects a null value passed in such an
   20757        argument slot.
   20758      * A new type attribute, may_alias, has been added. Accesses to
   20759        objects with types with this attribute are not subjected to
   20760        type-based alias analysis, but are instead assumed to be able to
   20761        alias any other type of objects, just like the char type.
   20762 
   20763   C++
   20764 
   20765      * Type based alias analysis has been implemented for C++ aggregate
   20766        types.
   20767 
   20768   Objective-C
   20769 
   20770      * Generate an error if Objective-C objects are passed by value in
   20771        function and method calls.
   20772      * When -Wselector is used, check the whole list of selectors at the
   20773        end of compilation, and emit a warning if a @selector() is not
   20774        known.
   20775      * Define __NEXT_RUNTIME__ when compiling for the NeXT runtime.
   20776      * No longer need to include objc/objc-class.h to compile self calls
   20777        in class methods (NeXT runtime only).
   20778      * New -Wundeclared-selector option.
   20779      * Removed selector bloating which was causing object files to be 10%
   20780        bigger on average (GNU runtime only).
   20781      * Using at run time @protocol() objects has been fixed in certain
   20782        situations (GNU runtime only).
   20783      * Type checking has been fixed and improved in many situations
   20784        involving protocols.
   20785 
   20786   Java
   20787 
   20788      * The java.sql and javax.sql packages now implement the JDBC 3.0 (JDK
   20789        1.4) API.
   20790      * The JDK 1.4 assert facility has been implemented.
   20791      * The bytecode interpreter is now direct threaded and thus faster.
   20792 
   20793   Fortran
   20794 
   20795      * Fortran improvements are listed in [7]the Fortran documentation.
   20796 
   20797   Ada
   20798 
   20799      * Ada tasking now works with glibc 2.3.x threading libraries.
   20800 
   20801 New Targets and Target Specific Improvements
   20802 
   20803      * The following changes have been made to the HP-PA port:
   20804           + The port now defaults to scheduling for the PA8000 series of
   20805             processors.
   20806           + Scheduling support for the PA7300 processor has been added.
   20807           + The 32-bit port now supports weak symbols under HP-UX 11.
   20808           + The handling of initializers and finalizers has been improved
   20809             under HP-UX 11. The 64-bit port no longer uses collect2.
   20810           + Dwarf2 EH support has been added to the 32-bit GNU/Linux port.
   20811           + ABI fixes to correct the passing of small structures by value.
   20812      * The SPARC, HP-PA, SH4, and x86/pentium ports have been converted to
   20813        use the DFA processor pipeline description.
   20814      * The following NetBSD configurations for the SuperH processor family
   20815        have been added:
   20816           + SH3, big-endian, sh-*-netbsdelf*
   20817           + SH3, little-endian, shle-*-netbsdelf*
   20818           + SH5, SHmedia, big-endian, 32-bit default, sh5-*-netbsd*
   20819           + SH5, SHmedia, little-endian, 32-bit default, sh5le-*-netbsd*
   20820           + SH5, SHmedia, big-endian, 64-bit default, sh64-*-netbsd*
   20821           + SH5, SHmedia, little-endian, 64-bit default, sh64le-*-netbsd*
   20822      * The following changes have been made to the IA-32/x86-64 port:
   20823           + SSE2 and 3dNOW! intrinsics are now supported.
   20824           + Support for thread local storage has been added to the IA-32
   20825             and x86-64 ports.
   20826           + The x86-64 port has been significantly improved.
   20827      * The following changes have been made to the MIPS port:
   20828           + All configurations now accept the -mabi switch. Note that you
   20829             will need appropriate multilibs for this option to work
   20830             properly.
   20831           + ELF configurations will always pass an ABI flag to the
   20832             assembler, except when the MIPS EABI is selected.
   20833           + -mabi=64 no longer selects MIPS IV code.
   20834           + The -mcpu option, which was deprecated in 3.1 and 3.2, has
   20835             been removed from this release.
   20836           + -march now changes the core ISA level. In previous releases,
   20837             it would change the use of processor-specific extensions, but
   20838             would leave the core ISA unchanged. For example, mips64-elf
   20839             -march=r8000 will now generate MIPS IV code.
   20840           + Under most configurations, -mipsN now acts as a synonym for
   20841             -march.
   20842           + There are some new preprocessor macros to describe the -march
   20843             and -mtune settings. See the documentation of those options
   20844             for details.
   20845           + Support for the NEC VR-Series processors has been added. This
   20846             includes the 54xx, 5500, and 41xx series.
   20847           + Support for the Sandcraft sr71k processor has been added.
   20848      * The following changes have been made to the S/390 port:
   20849           + Support to build the Java runtime libraries has been added.
   20850             Java is now enabled by default on s390-*-linux* and
   20851             s390x-*-linux* targets.
   20852           + Multilib support for the s390x-*-linux* target has been added;
   20853             this allows to build 31-bit binaries using the -m31 option.
   20854           + Support for thread local storage has been added.
   20855           + Inline assembler code may now use the 'Q' constraint to
   20856             specify memory operands without index register.
   20857           + Various platform-specific performance improvements have been
   20858             implemented; in particular, the compiler now uses the BRANCH
   20859             ON COUNT family of instructions and makes more frequent use of
   20860             the TEST UNDER MASK family of instructions.
   20861      * The following changes have been made to the PowerPC port:
   20862           + Support for IBM Power4 processor added.
   20863           + Support for Motorola e500 SPE added.
   20864           + Support for AIX 5.2 added.
   20865           + Function and Data sections now supported on AIX.
   20866           + Sibcall optimizations added.
   20867      * The support for H8 Tiny is added to the H8/300 port with -mn.
   20868 
   20869 [8]Obsolete Systems
   20870 
   20871    Support for a number of older systems has been declared obsolete in GCC
   20872    3.3. Unless there is activity to revive them, the next release of GCC
   20873    will have their sources permanently removed.
   20874 
   20875    All configurations of the following processor architectures have been
   20876    declared obsolete:
   20877      * Matsushita MN10200, mn10200-*-*
   20878      * Motorola 88000, m88k-*-*
   20879      * IBM ROMP, romp-*-*
   20880 
   20881    Also, some individual systems have been obsoleted:
   20882      * Alpha
   20883           + Interix, alpha*-*-interix*
   20884           + Linux libc1, alpha*-*-linux*libc1*
   20885           + Linux ECOFF, alpha*-*-linux*ecoff*
   20886      * ARM
   20887           + Generic a.out, arm*-*-aout*
   20888           + Conix, arm*-*-conix*
   20889           + "Old ABI," arm*-*-oabi
   20890           + StrongARM/COFF, strongarm-*-coff*
   20891      * HPPA (PA-RISC)
   20892           + Generic OSF, hppa1.0-*-osf*
   20893           + Generic BSD, hppa1.0-*-bsd*
   20894           + HP/UX versions 7, 8, and 9, hppa1.[01]-*-hpux[789]*
   20895           + HiUX, hppa*-*-hiux*
   20896           + Mach Lites, hppa*-*-lites*
   20897      * Intel 386 family
   20898           + Windows NT 3.x, i?86-*-win32
   20899      * MC68000 family
   20900           + HP systems, m68000-hp-bsd* and m68k-hp-bsd*
   20901           + Sun systems, m68000-sun-sunos*, m68k-sun-sunos*, and
   20902             m68k-sun-mach*
   20903           + AT&T systems, m68000-att-sysv*
   20904           + Atari systems, m68k-atari-sysv*
   20905           + Motorola systems, m68k-motorola-sysv*
   20906           + NCR systems, m68k-ncr-sysv*
   20907           + Plexus systems, m68k-plexus-sysv*
   20908           + Commodore systems, m68k-cbm-sysv*
   20909           + Citicorp TTI, m68k-tti-*
   20910           + Unos, m68k-crds-unos*
   20911           + Concurrent RTU, m68k-ccur-rtu*
   20912           + Linux a.out, m68k-*-linux*aout*
   20913           + Linux libc1, m68k-*-linux*libc1*
   20914           + pSOS, m68k-*-psos*
   20915      * MIPS
   20916           + Generic ECOFF, mips*-*-ecoff*
   20917           + SINIX, mips-sni-sysv4
   20918           + Orion RTEMS, mips64orion-*-rtems*
   20919      * National Semiconductor 32000
   20920           + OpenBSD, ns32k-*-openbsd*
   20921      * POWER (aka RS/6000) and PowerPC
   20922           + AIX versions 1, 2, and 3, rs6000-ibm-aix[123]*
   20923           + Bull BOSX, rs6000-bull-bosx
   20924           + Generic Mach, rs6000-*-mach*
   20925           + Generic SysV, powerpc*-*-sysv*
   20926           + Linux libc1, powerpc*-*-linux*libc1*
   20927      * Sun SPARC
   20928           + Generic a.out, sparc-*-aout*, sparclet-*-aout*,
   20929             sparclite-*-aout*, and sparc86x-*-aout*
   20930           + NetBSD a.out, sparc-*-netbsd*aout*
   20931           + Generic BSD, sparc-*-bsd*
   20932           + ChorusOS, sparc-*-chorusos*
   20933           + Linux a.out, sparc-*-linux*aout*
   20934           + Linux libc1, sparc-*-linux*libc1*
   20935           + LynxOS, sparc-*-lynxos*
   20936           + Solaris on HAL hardware, sparc-hal-solaris2*
   20937           + SunOS versions 3 and 4, sparc-*-sunos[34]*
   20938      * NEC V850
   20939           + RTEMS, v850-*-rtems*
   20940      * VAX
   20941           + VMS, vax-*-vms*
   20942 
   20943 Documentation improvements
   20944 
   20945 Other significant improvements
   20946 
   20947      * Almost all front-end dependencies in the compiler have been
   20948        separated out into a set of language hooks. This should make adding
   20949        a new front end clearer and easier.
   20950      * One effect of removing the separate preprocessor is a small
   20951        increase in the robustness of the compiler in general, and the
   20952        maintainability of target descriptions. Previously target-specific
   20953        built-in macros and others, such as __FAST_MATH__, had to be
   20954        handled with so-called specs that were hard to maintain. Often they
   20955        would fail to behave properly when conflicting options were
   20956        supplied on the command line, and define macros in the user's
   20957        namespace even when strict ISO compliance was requested.
   20958        Integrating the preprocessor has cleanly solved these issues.
   20959      * The Makefile suite now supports redirection of make install by
   20960        means of the variable DESTDIR.
   20961      __________________________________________________________________
   20962 
   20963 GCC 3.3
   20964 
   20965    Detailed release notes for the GCC 3.3 release follow.
   20966 
   20967   Bug Fixes
   20968 
   20969     bootstrap failures
   20970 
   20971      * [9]10140 cross compiler build failures: missing __mempcpy (DUP:
   20972        [10]10198,[11]10338)
   20973 
   20974     Internal compiler errors (multi-platform)
   20975 
   20976      * [12]3581 large string causes segmentation fault in cc1
   20977      * [13]4382 __builtin_{set,long}jmp with -O3 can crash the compiler
   20978      * [14]5533 (c++) ICE when processing std::accumulate(begin, end,
   20979        init, invalid_op)
   20980      * [15]6387 -fpic -gdwarf-2 -g1 combination gives ICE in dwarf2out
   20981      * [16]6412 (c++) ICE in retrieve_specialization
   20982      * [17]6620 (c++) partial template specialization causes an ICE
   20983        (segmentation fault)
   20984      * [18]6663 (c++) ICE with attribute aligned
   20985      * [19]7068 ICE with incomplete types
   20986      * [20]7083 (c++) ICE using -gstabs with dodgy class derivation
   20987      * [21]7647 (c++) ICE when data member has the name of the enclosing
   20988        class
   20989      * [22]7675 ICE in fixup_var_refs_1
   20990      * [23]7718 'complex' template instantiation causes ICE
   20991      * [24]8116 (c++) ICE in member template function
   20992      * [25]8358 (ada) Ada compiler accesses freed memory, crashes
   20993      * [26]8511 (c++) ICE: (hopefully) reproducible cc1plus segmentation
   20994        fault
   20995      * [27]8564 (c++) ICE in find_function_data, in function.c
   20996      * [28]8660 (c++) template overloading ICE in tsubst_expr, in cp/pt.c
   20997      * [29]8766 (c++) ICE after failed initialization of static template
   20998        variable
   20999      * [30]8803 ICE in instantiate_virtual_regs_1, in function.c
   21000      * [31]8846 (c++) ICE after diagnostic if fr_FR@euro locale is set
   21001      * [32]8906 (c++) ICE (Segmentation fault) when parsing nested-class
   21002        definition
   21003      * [33]9216 (c++) ICE on missing template parameter
   21004      * [34]9261 (c++) ICE in arg_assoc, in cp/decl2.c
   21005      * [35]9263 (fortran) ICE caused by invalid PARAMETER in implied DO
   21006        loop
   21007      * [36]9429 (c++) ICE in template instantiation with a pointered new
   21008        operator
   21009      * [37]9516 Internal error when using a big array
   21010      * [38]9600 (c++) ICE with typedefs in template class
   21011      * [39]9629 (c++) virtual inheritance segfault
   21012      * [40]9672 (c++) ICE: Error reporting routines re-entered
   21013      * [41]9749 (c++) ICE in write_expression on invalid function
   21014        prototype
   21015      * [42]9794 (fortran) ICE: floating point exception during constant
   21016        folding
   21017      * [43]9829 (c++) Missing colon in nested namespace usage causes ICE
   21018      * [44]9916 (c++) ICE with noreturn function in ?: statement
   21019      * [45]9936 ICE with local function and variable-length 2d array
   21020      * [46]10262 (c++) cc1plus crashes with large generated code
   21021      * [47]10278 (c++) ICE in parser for invalid code
   21022      * [48]10446 (c++) ICE on definition of nonexistent member function of
   21023        nested class in a class template
   21024      * [49]10451 (c++) ICE in grokdeclarator on spurious mutable
   21025        declaration
   21026      * [50]10506 (c++) ICE in build_new at cp/init.c with
   21027        -fkeep-inline-functions and multiple inheritance
   21028      * [51]10549 (c++) ICE in store_bit_field on bitfields that exceed the
   21029        precision of the declared type
   21030 
   21031     Optimization bugs
   21032 
   21033      * [52]2001 Inordinately long compile times in reload CSE regs
   21034      * [53]2391 Exponential compilation time explosion in combine
   21035      * [54]2960 Duplicate loop conditions even with -Os
   21036      * [55]4046 redundant conditional branch
   21037      * [56]6405 Loop-unrolling related performance regressions
   21038      * [57]6798 very long compile time with large case-statement
   21039      * [58]6871 const objects shouldn't be moved to .bss
   21040      * [59]6909 problem w/ -Os on modified loop-2c.c test case
   21041      * [60]7189 gcc -O2 -Wall does not print ``control reaches end of
   21042        non-void function'' warning
   21043      * [61]7642 optimization problem with signbit()
   21044      * [62]8634 incorrect code for inlining of memcpy under -O2
   21045      * [63]8750 Cygwin prolog generation erroneously emitting __alloca as
   21046        regular function call
   21047 
   21048     C front end
   21049 
   21050      * [64]2161 long if-else cascade overflows parser stack
   21051      * [65]4319 short accepted on typedef'd char
   21052      * [66]8602 incorrect line numbers in warning messages when using
   21053        inline functions
   21054      * [67]9177 -fdump-translation-unit: C front end deletes function_decl
   21055        AST nodes and breaks debugging dumps
   21056      * [68]9853 miscompilation of non-constant structure initializer
   21057 
   21058     c++ compiler and library
   21059 
   21060      * [69]45 legal template specialization code is rejected (DUP:
   21061        [70]3784)
   21062      * [71]764 lookup failure: friend operator and dereferencing a pointer
   21063        and templates (DUP: [72]5116)
   21064      * [73]2862 gcc accepts invalid explicit instantiation syntax (DUP:
   21065        2863)
   21066      * [74]3663 G++ doesn't check access control during template
   21067        instantiation
   21068      * [75]3797 gcc fails to emit explicit specialization of a template
   21069        member
   21070      * [76]3948 Two destructors are called when no copy destructor is
   21071        defined (ABI change)
   21072      * [77]4137 Conversion operator within template is not accepted
   21073      * [78]4361 bogus ambiguity taking the address of a member template
   21074      * [79]4802 g++ accepts illegal template code (access to private
   21075        member; DUP: [80]5837)
   21076      * [81]4803 inline function is used but never defined, and g++ does
   21077        not object
   21078      * [82]5094 Partial specialization cannot be friend?
   21079      * [83]5730 complex<double>::norm() -- huge slowdown from egcs-2.91.66
   21080      * [84]6713 Regression wrt 3.0.4: g++ -O2 leads to seg fault at run
   21081        time
   21082      * [85]7015 certain __asm__ constructs rejected
   21083      * [86]7086 compile time regression (quadratic behavior in
   21084        fixup_var_refs)
   21085      * [87]7099 G++ doesn't set the noreturn attribute on std::exit and
   21086        std::abort
   21087      * [88]7247 copy constructor missing when inlining enabled (invalid
   21088        optimization?)
   21089      * [89]7441 string array initialization compilation time regression
   21090        from seconds to minutes
   21091      * [90]7768 __PRETTY_FUNCTION__ for template destructor is wrong
   21092      * [91]7804 bad printing of floating point constant in warning message
   21093      * [92]8099 Friend classes and template specializations
   21094      * [93]8117 member function pointers and multiple inheritance
   21095      * [94]8205 using declaration and multiple inheritance
   21096      * [95]8645 unnecessary non-zero checks in stl_tree.h
   21097      * [96]8724 explicit destructor call for incomplete class allowed
   21098      * [97]8805 compile time regression with many member variables
   21099      * [98]8691 -O3 and -fno-implicit-templates are incompatible
   21100      * [99]8700 unhelpful error message for binding temp to reference
   21101      * [100]8724 explicit destructor call for incomplete class allowed
   21102      * [101]8949 numeric_limits<>::denorm_min() and is_iec559 problems
   21103      * [102]9016 Failure to consistently constant fold "constant" C++
   21104        objects
   21105      * [103]9053 g++ confused about ambiguity of overloaded function
   21106        templates
   21107      * [104]9152 undefined virtual thunks
   21108      * [105]9182 basic_filebuf<> does not report errors in codecvt<>::out
   21109      * [106]9297 data corruption due to codegen bug (when copying.)
   21110      * [107]9318 i/ostream::operator>>/<<(streambuf*) broken
   21111      * [108]9320 Incorrect usage of traits_type::int_type in stdio_filebuf
   21112      * [109]9400 bogus -Wshadow warning: shadowed declaration of this in
   21113        local classes
   21114      * [110]9424 i/ostream::operator>>/<<(streambuf*) drops characters
   21115      * [111]9425 filebuf::pbackfail broken (DUP: [112]9439)
   21116      * [113]9474 GCC freezes in compiling a weird code mixing <iostream>
   21117        and <iostream.h>
   21118      * [114]9548 Incorrect results from setf(ios::fixed) and precision(-1)
   21119        [115][DR 231]
   21120      * [116]9555 ostream inserters fail to set badbit on exception
   21121      * [117]9561 ostream inserters rethrow exception of wrong type
   21122      * [118]9563 ostream::sentry returns true after a failed preparation
   21123      * [119]9582 one-definition rule violation in std::allocator
   21124      * [120]9622 __PRETTY_FUNCTION__ incorrect in template destructors
   21125      * [121]9683 bug in initialization chains for static const variables
   21126        from template classes
   21127      * [122]9791 -Woverloaded-virtual reports hiding of destructor
   21128      * [123]9817 collate::compare doesn't handle nul characters
   21129      * [124]9825 filebuf::sputbackc breaks sbumpc
   21130      * [125]9826 operator>>(basic_istream, basic_string) fails to compile
   21131        with custom traits
   21132      * [126]9924 Multiple using statements for builtin functions not
   21133        allowed
   21134      * [127]9946 destructor is not called for temporary object
   21135      * [128]9964 filebuf::close() sometimes fails to close file
   21136      * [129]9988 filebuf::overflow writes EOF to file
   21137      * [130]10033 optimization breaks polymorphic references w/ typeid
   21138        operator
   21139      * [131]10097 filebuf::underflow drops characters
   21140      * [132]10132 filebuf destructor can throw exceptions
   21141      * [133]10180 gcc fails to warn about non-inlined function
   21142      * [134]10199 method parametrized by template does not work everywhere
   21143      * [135]10300 use of array-new (nothrow) in segfaults on NULL return
   21144      * [136]10427 Stack corruption with variable-length automatic arrays
   21145        and virtual destructors
   21146      * [137]10503 Compilation never stops in fixed_type_or_null
   21147 
   21148     Objective-C
   21149 
   21150      * [138]5956 selectors aren't matched properly when added to the
   21151        selector table
   21152 
   21153     Fortran compiler and library
   21154 
   21155      * [139]1832 list directed i/o overflow hangs, -fbounds-check doesn't
   21156        detect
   21157      * [140]3924 g77 generates code that is rejected by GAS if COFF debug
   21158        info requested
   21159      * [141]5634 doc: explain that configure --prefix=~/... does not work
   21160      * [142]6367 multiple repeat counts confuse namelist read into array
   21161      * [143]6491 Logical operations error on logicals when using
   21162        -fugly-logint
   21163      * [144]6742 Generation of C++ Prototype for FORTRAN and extern "C"
   21164      * [145]7113 Failure of g77.f-torture/execute/f90-intrinsic-bit.f -Os
   21165        on irix6.5
   21166      * [146]7236 OPEN(...,RECL=nnn,...) without ACCESS='DIRECT' should
   21167        assume a direct access file
   21168      * [147]7278 g77 "bug"; the executable misbehaves (with -O2
   21169        -fno-automatic)
   21170      * [148]7384 DATE_AND_TIME milliseconds field inactive on Windows
   21171      * [149]7388 Incorrect output with 0-based array of characters
   21172      * [150]8587 Double complex zero ** double precision number -> NaN
   21173        instead of zero
   21174      * [151]9038 -ffixed-line-length-none -x f77-cpp-input gives: Warning:
   21175        unknown register name line-length-none
   21176      * [152]10197 Direct access files not unformatted by default
   21177 
   21178     Java compiler and library
   21179 
   21180      * [153]6005 gcj fails to build rhug on alpha
   21181      * [154]6389 System.getProperty("") should always throw an
   21182        IllegalArgumentException
   21183      * [155]6576 java.util.ResourceBundle.getResource ignores locale
   21184      * [156]6652 new java.io.File("").getCanonicalFile() throws exception
   21185      * [157]7060 getMethod() doesn't search super interface
   21186      * [158]7073 bytecode interpreter gives wrong answer for interface
   21187        getSuperclass()
   21188      * [159]7180 possible bug in
   21189        javax.naming.spi.NamingManager.getPlusPath()
   21190      * [160]7416 java.security startup refs "GNU libgcj.security"
   21191      * [161]7570 Runtime.exec with null envp: child doesn't inherit parent
   21192        env (DUP: [162]7578)
   21193      * [163]7611 Internal error while compiling libjava with -O
   21194      * [164]7709 NullPointerException in _Jv_ResolvePoolEntry
   21195      * [165]7766 ZipInputStream.available returns 0 immediately after
   21196        construction
   21197      * [166]7785 Calendar.getTimeInMillis/setTimeInMillis should be public
   21198      * [167]7786 TimeZone.getDSTSavings() from JDK1.4 not implemented
   21199      * [168]8142 '$' in class names vs. dlopen 'dynamic string tokens'
   21200      * [169]8234 ZipInputStream chokes when InputStream.read() returns
   21201        small chunks
   21202      * [170]8415 reflection bug: exception info for Method
   21203      * [171]8481 java.Random.nextInt(int) may return negative
   21204      * [172]8593 Error reading GZIPped files with BufferedReader
   21205      * [173]8759 java.beans.Introspector has no flushCaches() or
   21206        flushFromCaches() methods
   21207      * [174]8997 spin() calls Thread.sleep
   21208      * [175]9253 on win32, java.io.File.listFiles("C:\\") returns pwd
   21209        instead of the root content of C:
   21210      * [176]9254 java::lang::Object::wait(), threads-win32.cc returns
   21211        wrong return codes
   21212      * [177]9271 Severe bias in java.security.SecureRandom
   21213 
   21214     Ada compiler and library
   21215 
   21216      * [178]6767 make gnatlib-shared fails on -laddr2line
   21217      * [179]9911 gnatmake fails to link when GCC configured with
   21218        --with-sjlj-exceptions=yes
   21219      * [180]10020 Can't bootstrap gcc on AIX with Ada enabled
   21220      * [181]10546 Ada tasking not working on Red Hat 9
   21221 
   21222     preprocessor
   21223 
   21224      * [182]7029 preprocessor should ignore #warning with -M
   21225 
   21226     ARM-specific
   21227 
   21228      * [183]2903 [arm] Optimization bug with long long arithmetic
   21229      * [184]7873 arm-linux-gcc fails when assigning address to a bit field
   21230 
   21231     FreeBSD-specific
   21232 
   21233      * [185]7680 float functions undefined in math.h/cmath with #define
   21234        _XOPEN_SOURCE
   21235 
   21236     HP-UX or HP-PA-specific
   21237 
   21238      * [186]8705 [HP-PA] ICE in emit_move_insn_1, in expr.c
   21239      * [187]9986 [HP-UX] Incorrect transformation of fputs_unlocked to
   21240        fputc_unlocked
   21241      * [188]10056 [HP-PA] ICE at -O2 when building c++ code from doxygen
   21242 
   21243     m68hc11-specific
   21244 
   21245      * [189]6744 Bad assembler code generated: reference to pseudo
   21246        register z
   21247      * [190]7361 Internal compiler error in reload_cse_simplify_operands,
   21248        in reload1.c
   21249 
   21250     MIPS-specific
   21251 
   21252      * [191]9496 [mips-linux] bug in optimizer?
   21253 
   21254     PowerPC-specific
   21255 
   21256      * [192]7067 -Os with -mcpu=powerpc optimizes for speed (?) instead of
   21257        space
   21258      * [193]8480 reload ICEs for LAPACK code on powerpc64-linux
   21259      * [194]8784 [AIX] Internal compiler error in simplify_gen_subreg
   21260      * [195]10315 [powerpc] ICE: in extract_insn, in recog.c
   21261 
   21262     SPARC-specific
   21263 
   21264      * [196]10267 (documentation) Wrong build instructions for
   21265        *-*-solaris2*
   21266 
   21267     x86-specific (Intel/AMD)
   21268 
   21269      * [197]7916 ICE in instantiate_virtual_register_1
   21270      * [198]7926 (c++) i486 instructions in header files make c++ programs
   21271        crash on i386
   21272      * [199]8555 ICE in gen_split_1231
   21273      * [200]8994 ICE with -O -march=pentium4
   21274      * [201]9426 ICE with -fssa -funroll-loops -fprofile-arcs
   21275      * [202]9806 ICE in inline assembly with -fPIC flag
   21276      * [203]10077 gcc -msse2 generates movd to move dwords between xmm
   21277        regs
   21278      * [204]10233 64-bit comparison only comparing bottom 32-bits
   21279      * [205]10286 type-punning doesn't work with __m64 and -O
   21280      * [206]10308 [x86] ICE with -O -fgcse or -O2
   21281      __________________________________________________________________
   21282 
   21283 [207]GCC 3.3.1
   21284 
   21285   Bug Fixes
   21286 
   21287    This section lists the problem reports (PRs) from GCC's bug tracking
   21288    system that are known to be fixed in the 3.3.1 release. This list might
   21289    not be complete (that is, it is possible that some PRs that have been
   21290    fixed are not listed here).
   21291 
   21292     Bootstrap failures
   21293 
   21294      * [208]11272 [Solaris] make bootstrap fails while building libstdc++
   21295 
   21296     Internal compiler errors (multi-platform)
   21297 
   21298      * [209]5754 ICE on invalid nested template class
   21299      * [210]6597 ICE in set_mem_alias_set compiling Qt with -O2 on ia64
   21300        and --enable-checking
   21301      * [211]6949 (c++) ICE in tsubst_decl, in cp/pt.c
   21302      * [212]7053 (c++) ICE when declaring a function already defined as a
   21303        friend method of a template class
   21304      * [213]8164 (c++) ICE when using different const expressions as
   21305        template parameter
   21306      * [214]8384 (c++) ICE in is_base_type, in dwarf2out.c
   21307      * [215]9559 (c++) ICE with invalid initialization of a static const
   21308      * [216]9649 (c++) ICE in finish_member_declaration, in cp/semantics.c
   21309        when redeclaring a static member variable
   21310      * [217]9864 (fortran) ICE in add_abstract_origin_attribute, in
   21311        dwarfout.c with -g -O -finline-functions
   21312      * [218]10432 (c++) ICE in poplevel, in cp/decl.c
   21313      * [219]10475 ICE in subreg_highpart_offset for code with long long
   21314      * [220]10635 (c++) ICE when dereferencing an incomplete type casted
   21315        from a void pointer
   21316      * [221]10661 (c++) ICE in instantiate_decl, in cp/pt.c while
   21317        instantiating static member variables
   21318      * [222]10700 ICE in copy_to_mode_reg on 64-bit targets
   21319      * [223]10712 (c++) ICE in constructor_name_full, in cp/decl2.c
   21320      * [224]10796 (c++) ICE when defining an enum with two values: -1 and
   21321        MAX_INT_64BIT
   21322      * [225]10890 ICE in merge_assigned_reloads building Linux 2.4.2x
   21323        sched.c
   21324      * [226]10939 (c++) ICE with template code
   21325      * [227]10956 (c++) ICE when specializing a template member function
   21326        of a template class, in tsubst, in cp/pt.c
   21327      * [228]11041 (c++) ICE: const myclass &x = *x; (when operator*()
   21328        defined)
   21329      * [229]11059 (c++) ICE with empty union
   21330      * [230]11083 (c++) ICE in commit_one_edge_insertion, in cfgrtl.c with
   21331        -O2 -fnon-call-exceptions
   21332      * [231]11105 (c++) ICE in mangle_conv_op_name_for_type
   21333      * [232]11149 (c++) ICE on error when instantiation with call function
   21334        of a base type
   21335      * [233]11228 (c++) ICE on new-expression using array operator new and
   21336        default-initialization
   21337      * [234]11282 (c++) Infinite memory usage after syntax error
   21338      * [235]11301 (fortran) ICE with -fno-globals
   21339      * [236]11308 (c++) ICE when using an enum type name as if it were a
   21340        class or namespace
   21341      * [237]11473 (c++) ICE with -gstabs when empty struct inherits from
   21342        an empty struct
   21343      * [238]11503 (c++) ICE when instantiating template with ADDR_EXPR
   21344      * [239]11513 (c++) ICE in push_template_decl_real, in cp/pt.c:
   21345        template member functions
   21346 
   21347     Optimization bugs
   21348 
   21349      * [240]11198 -O2 -frename-registers generates wrong code (aliasing
   21350        problem)
   21351      * [241]11304 Wrong code production with -fomit-frame-pointer
   21352      * [242]11381 volatile memory access optimized away
   21353      * [243]11536 [strength-reduce] -O2 optimization produces wrong code
   21354      * [244]11557 constant folding bug generates wrong code
   21355 
   21356     C front end
   21357 
   21358      * [245]5897 No warning for statement after return
   21359      * [246]11279 DWARF-2 output mishandles large enums
   21360 
   21361     Preprocessor bugs
   21362 
   21363      * [247]11022 no warning for non-compatible macro redefinition
   21364 
   21365     C++ compiler and library
   21366 
   21367      * [248]2330 static_cast<>() to a private base is allowed
   21368      * [249]5388 Incorrect message "operands to ?: have different types"
   21369      * [250]5390 Libiberty fails to demangle multi-digit template
   21370        parameters
   21371      * [251]7877 Incorrect parameter passing to specializations of member
   21372        function templates
   21373      * [252]9393 Anonymous namespaces and compiling the same file twice
   21374      * [253]10032 -pedantic converts some errors to warnings
   21375      * [254]10468 const typeof(x) is non-const, but only in templates
   21376      * [255]10527 confused error message with "new int()" parameter
   21377        initializer
   21378      * [256]10679 parameter MIN_INLINE_INSNS is not honored
   21379      * [257]10682 gcc chokes on a typedef for an enum inside a class
   21380        template
   21381      * [258]10689 pow(std::complex(0),1/3) returns (nan, nan) instead of
   21382        0.
   21383      * [259]10845 template member function (with nested template as
   21384        parameter) cannot be called anymore if another unrelated template
   21385        member function is defined
   21386      * [260]10849 Cannot define an out-of-class specialization of a
   21387        private nested template class
   21388      * [261]10888 Suppress -Winline warnings for system headers
   21389      * [262]10929 -Winline warns about functions for which no definition
   21390        is visible
   21391      * [263]10931 valid conversion static_cast<const unsigned
   21392        int&>(lvalue-of-type-int) is rejected
   21393      * [264]10940 Bad code with explicit specialization
   21394      * [265]10968 If member function implicitly instantiated, explicit
   21395        instantiation of class fails to instantiate it
   21396      * [266]10990 Cannot convert with dynamic_cast<> to a private base
   21397        class from within a member function
   21398      * [267]11039 Bad interaction between implicit typename deprecation
   21399        and friendship
   21400      * [268]11062 (libstdc++) avoid __attribute__ ((unused)); say
   21401        "__unused__" instead
   21402      * [269]11095 C++ iostream manipulator causes segfault when called
   21403        with negative argument
   21404      * [270]11098 g++ doesn't emit complete debugging information for
   21405        local variables in destructors
   21406      * [271]11137 GNU/Linux shared library constructors not called unless
   21407        there's one global object
   21408      * [272]11154 spurious ambiguity report for template class
   21409        specialization
   21410      * [273]11329 Compiler cannot find user defined implicit typecast
   21411      * [274]11332 Spurious error with casts in ?: expression
   21412      * [275]11431 static_cast behavior with subclasses when default
   21413        constructor available
   21414      * [276]11528 money_get facet does not accept "$.00" as valid
   21415      * [277]11546 Type lookup problems in out-of-line definition of a
   21416        class doubly nested from a template class
   21417      * [278]11567 C++ code containing templated member function with same
   21418        name as pure virtual member function results in linking failure
   21419      * [279]11645 Failure to deal with using and private inheritance
   21420 
   21421     Java compiler and library
   21422 
   21423      * [280]5179 Qualified static field access doesn't initialize its
   21424        class
   21425      * [281]8204 gcj -O2 to native reorders certain instructions
   21426        improperly
   21427      * [282]10838 java.io.ObjectInputStream syntax error
   21428      * [283]10886 The RMI registry that comes with GCJ does not work
   21429        correctly
   21430      * [284]11349 JNDI URL context factories not located correctly
   21431 
   21432     x86-specific (Intel/AMD)
   21433 
   21434      * [285]4823 ICE on inline assembly code
   21435      * [286]8878 miscompilation with -O and SSE
   21436      * [287]9815 (c++ library) atomicity.h - fails to compile with -O3
   21437        -masm=intel
   21438      * [288]10402 (inline assembly) [x86] ICE in merge_assigned_reloads,
   21439        in reload1.c
   21440      * [289]10504 ICE with SSE2 code and -O3 -mcpu=pentium4 -msse2
   21441      * [290]10673 ICE for x86-64 on freebsd libc vfprintf.c source
   21442      * [291]11044 [x86] out of range loop instructions for FP code on K6
   21443      * [292]11089 ICE: instantiate_virtual_regs_lossage while using SSE
   21444        built-ins
   21445      * [293]11420 [x86_64] gcc generates invalid asm code when "-O -fPIC"
   21446        is used
   21447 
   21448     SPARC- or Solaris- specific
   21449 
   21450      * [294]9362 solaris 'as' dies when fed .s and "-gstabs"
   21451      * [295]10142 [SPARC64] gcc produces wrong code when passing
   21452        structures by value
   21453      * [296]10663 New configure check aborts with Sun tools.
   21454      * [297]10835 combinatorial explosion in scheduler on HyperSPARC
   21455      * [298]10876 ICE in calculate_giv_inc when building KDE
   21456      * [299]10955 wrong code at -O3 for structure argument in context of
   21457        structure return
   21458      * [300]11018 -mcpu=ultrasparc busts tar-1.13.25
   21459      * [301]11556 [sparc64] ICE in gen_reg_rtx() while compiling 2.6.x
   21460        Linux kernel
   21461 
   21462     ia64 specific
   21463 
   21464      * [302]10907 gcc violates the ia64 ABI (GP must be preserved)
   21465      * [303]11320 scheduler bug (in machine depended reorganization pass)
   21466      * [304]11599 bug with conditional and __builtin_prefetch
   21467 
   21468     PowerPC specific
   21469 
   21470      * [305]9745 [powerpc] gcc mis-compiles libmcrypt (alias problem
   21471        during loop)
   21472      * [306]10871 error in rs6000_stack_info save_size computation
   21473      * [307]11440 gcc mis-compiles c++ code (libkhtml) with -O2, -fno-gcse
   21474        cures it
   21475 
   21476     m68k-specific
   21477 
   21478      * [308]7594 [m68k] ICE on legal code associated with simplify-rtx
   21479      * [309]10557 [m68k] ICE in subreg_offset_representable_p
   21480      * [310]11054 [m68k] ICE in reg_overlap_mentioned_p
   21481 
   21482     ARM-specific
   21483 
   21484      * [311]10834 [arm] GCC 3.3 still generates incorrect instructions for
   21485        functions with __attribute__ ((interrupt ("IRQ")))
   21486      * [312]10842 [arm] Clobbered link register is copied to pc under
   21487        certain circumstances
   21488      * [313]11052 [arm] noce_process_if_block() can lose REG_INC notes
   21489      * [314]11183 [arm] ICE in change_address_1 (3.3) / subreg_hard_regno
   21490        (3.4)
   21491 
   21492     MIPS-specific
   21493 
   21494      * [315]11084 ICE in propagate_one_insn, in flow.c
   21495 
   21496     SH-specific
   21497 
   21498      * [316]10331 can't compile c++ part of gcc cross compiler for sh-elf
   21499      * [317]10413 [SH] ICE in reload_cse_simplify_operands, in reload1.c
   21500      * [318]11096 i686-linux to sh-linux cross compiler fails to compile
   21501        C++ files
   21502 
   21503     GNU/Linux (or Hurd?) specific
   21504 
   21505      * [319]2873 Bogus fixinclude of stdio.h from glibc 2.2.3
   21506 
   21507     UnixWare specific
   21508 
   21509      * [320]3163 configure bug: gcc/aclocal.m4 mmap test fails on UnixWare
   21510        7.1.1
   21511 
   21512     Cygwin (or mingw) specific
   21513 
   21514      * [321]5287 ICE with dllimport attribute
   21515      * [322]10148 [MingW/CygWin] Compiler dumps core
   21516 
   21517     DJGPP specific
   21518 
   21519      * [323]8787 GCC fails to emit .intel_syntax when invoked with
   21520        -masm=intel on DJGPP
   21521 
   21522     Darwin (and MacOS X) specific
   21523 
   21524      * [324]10900 trampolines crash
   21525 
   21526     Documentation
   21527 
   21528      * [325]1607 (c++) Format attributes on methods undocumented
   21529      * [326]4252 Invalid option `-fdump-translation-unit'
   21530      * [327]4490 Clarify restrictions on -m96bit-long-double,
   21531        -m128bit-long-double
   21532      * [328]10355 document an issue with regparm attribute on some systems
   21533        (e.g. Solaris)
   21534      * [329]10726 (fortran) Documentation for function "IDate Intrinsic
   21535        (Unix)" is wrong
   21536      * [330]10805 document bug in old version of Sun assembler
   21537      * [331]10815 warn against GNU binutils on AIX
   21538      * [332]10877 document need for newer binutils on i?86-*-linux-gnu
   21539      * [333]11280 Manual incorrect with respect to -freorder-blocks
   21540      * [334]11466 Document -mlittle-endian and its restrictions for the
   21541        sparc64 port
   21542 
   21543     Testsuite bugs (compiler itself is not affected)
   21544 
   21545      * [335]10737 newer bison causes g++.dg/parse/crash2.C to incorrectly
   21546        report failure
   21547      * [336]10810 gcc-3.3 fails make check: buffer overrun in
   21548        test_demangle.c
   21549      __________________________________________________________________
   21550 
   21551 [337]GCC 3.3.2
   21552 
   21553   Bug Fixes
   21554 
   21555    This section lists the problem reports (PRs) from GCC's bug tracker
   21556    that are known to be fixed in the 3.3.2 release. This list might not be
   21557    complete (that is, it is possible that some PRs that have been fixed
   21558    are not listed here).
   21559 
   21560     Bootstrap failures and problems
   21561 
   21562      * [338]8336 [SCO5] bootstrap config still tries to use COFF options
   21563      * [339]9330 [alpha-osf] Bootstrap failure on Compaq Tru64 with
   21564        --enable-threads=posix
   21565      * [340]9631 [hppa64-linux] gcc-3.3 fails to bootstrap
   21566      * [341]9877 fixincludes makes a bad sys/byteorder.h on svr5 (UnixWare
   21567        7.1.1)
   21568      * [342]11687 xstormy16-elf build fails in libf2c
   21569      * [343]12263 [SGI IRIX] bootstrap fails during compile of
   21570        libf2c/libI77/backspace.c
   21571      * [344]12490 buffer overflow in scan-decls.c (during Solaris 9
   21572        fix-header processing)
   21573 
   21574     Internal compiler errors (multi-platform)
   21575 
   21576      * [345]7277 Casting integers to vector types causes ICE
   21577      * [346]7939 (c++) ICE on invalid function template specialization
   21578      * [347]11063 (c++) ICE on parsing initialization list of const array
   21579        member
   21580      * [348]11207 ICE with negative index in array element designator
   21581      * [349]11522 (fortran) g77 dwarf-2 ICE in
   21582        add_abstract_origin_attribute
   21583      * [350]11595 (c++) ICE on duplicate label definition
   21584      * [351]11646 (c++) ICE in commit_one_edge_insertion with
   21585        -fnon-call-exceptions -fgcse -O
   21586      * [352]11665 ICE in struct initializer when taking address
   21587      * [353]11852 (c++) ICE with bad struct initializer.
   21588      * [354]11878 (c++) ICE in cp_expr_size
   21589      * [355]11883 ICE with any -O on mercury-generated C code
   21590      * [356]11991 (c++) ICE in cxx_incomplete_type_diagnostic, in
   21591        cp/typeck2.c when applying typeid operator to template template
   21592        parameter
   21593      * [357]12146 ICE in lookup_template_function, in cp/pt.c
   21594      * [358]12215 ICE in make_label_edge with -fnon-call-exceptions
   21595        -fno-gcse -O2
   21596      * [359]12369 (c++) ICE with templates and friends
   21597      * [360]12446 ICE in emit_move_insn on complicated array reference
   21598      * [361]12510 ICE in final_scan_insn
   21599      * [362]12544 ICE with large parameters used in nested functions
   21600 
   21601     C and optimization bugs
   21602 
   21603      * [363]9862 spurious warnings with -W -finline-functions
   21604      * [364]10962 lookup_field is a linear search on a linked list (can be
   21605        slow if large struct)
   21606      * [365]11370 -Wunreachable-code gives false complaints
   21607      * [366]11637 invalid assembly with -fnon-call-exceptions
   21608      * [367]11885 Problem with bitfields in packed structs
   21609      * [368]12082 Inappropriate unreachable code warnings
   21610      * [369]12180 Inline optimization fails for variadic function
   21611      * [370]12340 loop unroller + gcse produces wrong code
   21612 
   21613     C++ compiler and library
   21614 
   21615      * [371]3907 nested template parameter collides with member name
   21616      * [372]5293 confusing message when binding a temporary to a reference
   21617      * [373]5296 [DR115] Pointers to functions and to template functions
   21618        behave differently in deduction
   21619      * [374]7939 ICE on function template specialization
   21620      * [375]8656 Unable to assign function with __attribute__ and pointer
   21621        return type to an appropriate variable
   21622      * [376]10147 Confusing error message for invalid template function
   21623        argument
   21624      * [377]11400 std::search_n() makes assumptions about Size parameter
   21625      * [378]11409 issues with using declarations, overloading, and
   21626        built-in functions
   21627      * [379]11740 ctype<wchar_t>::do_is(mask, wchar_t) doesn't handle
   21628        multiple bits in mask
   21629      * [380]11786 operator() call on variable in other namespace not
   21630        recognized
   21631      * [381]11867 static_cast ignores ambiguity
   21632      * [382]11928 bug with conversion operators that are typedefs
   21633      * [383]12114 Uninitialized memory accessed in dtor
   21634      * [384]12163 static_cast + explicit constructor regression
   21635      * [385]12181 Wrong code with comma operator and c++
   21636      * [386]12236 regparm and fastcall messes up parameters
   21637      * [387]12266 incorrect instantiation of unneeded template during
   21638        overload resolution
   21639      * [388]12296 istream::peek() doesn't set eofbit
   21640      * [389]12298 [sjlj exceptions] Stack unwind destroys
   21641        not-yet-constructed object
   21642      * [390]12369 ICE with templates and friends
   21643      * [391]12337 apparently infinite loop in g++
   21644      * [392]12344 stdcall attribute ignored if function returns a pointer
   21645      * [393]12451 missing(late) class forward declaration in cxxabi.h
   21646      * [394]12486 g++ accepts invalid use of a qualified name
   21647 
   21648     x86 specific (Intel/AMD)
   21649 
   21650      * [395]8869 [x86 MMX] ICE with const variable optimization and MMX
   21651        builtins
   21652      * [396]9786 ICE in fixup_abnormal_edges with -fnon-call-exceptions
   21653        -O2
   21654      * [397]11689 g++3.3 emits un-assembleable code for k6 architecture
   21655      * [398]12116 [k6] Invalid assembly output values with X-MAME code
   21656      * [399]12070 ICE converting between double and long double with
   21657        -msoft-float
   21658 
   21659     ia64-specific
   21660 
   21661      * [400]11184 [ia64 hpux] ICE on __builtin_apply building libobjc
   21662      * [401]11535 __builtin_return_address may not work on ia64
   21663      * [402]11693 [ia64] ICE in gen_nop_type
   21664      * [403]12224 [ia64] Thread-local storage doesn't work
   21665 
   21666     PowerPC-specific
   21667 
   21668      * [404]11087 [powerpc64-linux] GCC miscompiles raid1.c from linux
   21669        kernel
   21670      * [405]11319 loop miscompiled on ppc32
   21671      * [406]11949 ICE Compiler segfault with ffmpeg -maltivec code
   21672 
   21673     SPARC-specific
   21674 
   21675      * [407]11662 wrong code for expr. with cast to long long and
   21676        exclusive or
   21677      * [408]11965 invalid assembler code for a shift < 32 operation
   21678      * [409]12301 (c++) stack corruption when a returned expression throws
   21679        an exception
   21680 
   21681     Alpha-specific
   21682 
   21683      * [410]11717 [alpha-linux] unrecognizable insn compiling for.c of
   21684        kernel 2.4.22-pre8
   21685 
   21686     HPUX-specific
   21687 
   21688      * [411]11313 problem with #pragma weak and static inline functions
   21689      * [412]11712 __STDC_EXT__ not defined for C++ by default anymore?
   21690 
   21691     Solaris specific
   21692 
   21693      * [413]12166 Profiled programs crash if PROFDIR is set
   21694 
   21695     Solaris-x86 specific
   21696 
   21697      * [414]12101 i386 Solaris no longer works with GNU as?
   21698 
   21699     Miscellaneous embedded target-specific bugs
   21700 
   21701      * [415]10988 [m32r-elf] wrong blockmove code with -O3
   21702      * [416]11805 [h8300-unknown-coff] [H8300] ICE for simple code with
   21703        -O2
   21704      * [417]11902 [sh4] spec file improperly inserts rpath even when none
   21705        needed
   21706      * [418]11903 [sh4] -pthread fails to link due to error in spec file
   21707        on sh4
   21708      __________________________________________________________________
   21709 
   21710 [419]GCC 3.3.3
   21711 
   21712   Minor features
   21713 
   21714    In addition to the bug fixes documented below, this release contains
   21715    few minor features such as:
   21716      * Support for --with-sysroot
   21717      * Support for automatic detection of executable stacks
   21718      * Support for SSE3 instructions
   21719      * Support for thread local storage debugging under GDB on S390
   21720 
   21721   Bug Fixes
   21722 
   21723    This section lists the problem reports (PRs) from GCC's bug tracker
   21724    that are known to be fixed in the 3.3.3 release. This list might not be
   21725    complete (that is, it is possible that some PRs that have been fixed
   21726    are not listed here).
   21727 
   21728     Bootstrap failures and issues
   21729 
   21730      * [420]11890 Building cross gcc-3.3.1 for sparc-sun-solaris2.6 fails
   21731      * [421]12399 boehm-gc fails (when building a cross compiler): libtool
   21732        unable to infer tagged configuration
   21733      * [422]13068 mklibgcc.in doesn't handle multi-level multilib
   21734        subdirectories properly
   21735 
   21736     Internal compiler errors (multi-platform)
   21737 
   21738      * [423]10060 ICE (stack overflow) on huge file (300k lines) due to
   21739        recursive behaviour of copy_rtx_if_shared, in emit_rtl.c
   21740      * [424]10555 (c++) ICE on undefined template argument
   21741      * [425]10706 (c++) ICE in mangle_class_name_for_template
   21742      * [426]11496 (fortran) error in flow_loops_find when -funroll-loops
   21743        active
   21744      * [427]11741 ICE in pre_insert_copy_insn, in gcse.c
   21745      * [428]12440 GCC crashes during compilation of quicktime4linux 2.0.0
   21746      * [429]12632 (fortran) -fbounds-check ICE
   21747      * [430]12712 (c++) ICE on short legit C++ code fragment with gcc
   21748        3.3.2
   21749      * [431]12726 (c++) ICE (segfault) on trivial code
   21750      * [432]12890 (c++) ICE on compilation of class with throwing method
   21751      * [433]12900 (c++) ICE in rtl_verify_flow_info_1
   21752      * [434]13060 (fortran) ICE in fixup_var_refs_1, in function.c on
   21753        correct code with -O2 -fno-force-mem
   21754      * [435]13289 (c++) ICE in regenerate_decl_from_template on recursive
   21755        template
   21756      * [436]13318 ICE: floating point exception in the loop optimizer
   21757      * [437]13392 (c++) ICE in convert_from_eh_region_ranges_1, in
   21758        except.c
   21759      * [438]13574 (c++) invalid array default initializer in class lets
   21760        gcc consume all memory and die
   21761      * [439]13475 ICE on SIMD variables with partial value initialization
   21762      * [440]13797 (c++) ICE on invalid template parameter
   21763      * [441]13824 (java) gcj SEGV with simple .java program
   21764 
   21765     C and optimization bugs
   21766 
   21767      * [442]8776 loop invariants are not removed (most likely)
   21768      * [443]10339 [sparc,ppc,ppc64] Invalid optimization: replacing
   21769        strncmp by memcmp
   21770      * [444]11350 undefined labels with -Os -fPIC
   21771      * [445]12826 Optimizer removes reference through volatile pointer
   21772      * [446]12500 stabs debug info: void no longer a predefined / builtin
   21773        type
   21774      * [447]12941 builtin-bitops-1.c miscompilation (latent bug)
   21775      * [448]12953 tree inliner bug (in inline_forbidden_p) and fix
   21776      * [449]13041 linux-2.6/sound/core/oss/rate.c miscompiled
   21777      * [450]13507 spurious printf format warning
   21778      * [451]13382 Type information for const pointer disappears during
   21779        optimization.
   21780      * [452]13394 noreturn attribute ignored on recursive invokation
   21781      * [453]13400 Compiled code crashes storing to read-only location
   21782      * [454]13521 Endless loop in calculate_global_regs_live
   21783 
   21784     C++ compiler and library
   21785 
   21786    Some of the bug fixes in this list were made to implement decisions
   21787    that the ISO C++ standards committee has made concerning several defect
   21788    reports (DRs). Links in the list below point to detailed discussion of
   21789    the relevant defect report.
   21790      * [455]2094 unimplemented: use of `ptrmem_cst' in template type
   21791        unification
   21792      * [456]2294 using declaration confusion
   21793      * [457]5050 template instantiation depth exceeds limit: recursion
   21794        problem?
   21795      * [458]9371 Bad exception handling in
   21796        i/ostream::operator>>/<<(streambuf*)
   21797      * [459]9546 bad exception handling in ostream members
   21798      * [460]10081 basic_ios::_M_cache_locale leaves NULL members in the
   21799        face of unknown locales
   21800      * [461]10093 [462][DR 61] Setting failbit in exceptions doesn't work
   21801      * [463]10095 istream::operator>>(int&) sets ios::badbit when
   21802        ios::failbit is set.
   21803      * [464]11554 Warning about reordering of initializers doesn't mention
   21804        location of constructor
   21805      * [465]12297 istream::sentry::sentry() handles eof() incorrectly.
   21806      * [466]12352 Exception safety problems in src/localename.cc
   21807      * [467]12438 Memory leak in locale::combine()
   21808      * [468]12540 Memory leak in locale::locale(const char*)
   21809      * [469]12594 DRs [470]60 [TC] and [471]63 [TC] not implemented
   21810      * [472]12657 Resolution of [473]DR 292 (WP) still unimplemented
   21811      * [474]12696 memory eating infinite loop in diagnostics (error
   21812        recovery problem)
   21813      * [475]12815 Code compiled with optimization behaves unexpectedly
   21814      * [476]12862 Conflicts between typedefs/enums and namespace member
   21815        declarations
   21816      * [477]12926 Wrong value after assignment in initialize list using
   21817        bit-fields
   21818      * [478]12967 Resolution of [479]DR 300 [WP] still unimplemented
   21819      * [480]12971 Resolution of [481]DR 328 [WP] still unimplemented
   21820      * [482]13007 basic_streambuf::pubimbue, imbue wrong
   21821      * [483]13009 Implicitly-defined assignment operator writes to wrong
   21822        memory
   21823      * [484]13057 regparm attribute not applied to destructor
   21824      * [485]13070 -Wformat option ignored in g++
   21825      * [486]13081 forward template declarations in <complex> let inlining
   21826        fail
   21827      * [487]13239 Assertion does not seem to work correctly anymore
   21828      * [488]13262 "xxx is private within this context" when initializing a
   21829        self-contained template class
   21830      * [489]13290 simple typo in concept checking for std::generate_n
   21831      * [490]13323 Template code does not compile in presence of typedef
   21832      * [491]13369 __verify_grouping (and __add_grouping?) not correct
   21833      * [492]13371 infinite loop with packed struct and inlining
   21834      * [493]13445 Template argument replacement "dereferences" a typedef
   21835      * [494]13461 Fails to access protected-ctor from public constant
   21836      * [495]13462 Non-standard-conforming type set::pointer
   21837      * [496]13478 gcc uses wrong constructor to initialize a const
   21838        reference
   21839      * [497]13544 "conflicting types" for enums in different scopes
   21840      * [498]13650 string::compare should not (always) use
   21841        traits_type::length()
   21842      * [499]13683 bogus warning about passing non-PODs through ellipsis
   21843      * [500]13688 Derived class is denied access to protected base class
   21844        member class
   21845      * [501]13774 Member variable cleared in virtual multiple inheritance
   21846        class
   21847      * [502]13884 Protect sstream.tcc from extern template use
   21848 
   21849     Java compiler and library
   21850 
   21851      * [503]10746 [win32] garbage collection crash in GCJ
   21852 
   21853     Objective-C compiler and library
   21854 
   21855      * [504]11433 Crash due to dereferencing null pointer when querying
   21856        protocol
   21857 
   21858     Fortran compiler and library
   21859 
   21860      * [505]12633 logical expression gives incorrect result with
   21861        -fugly-logint option
   21862      * [506]13037 [gcse-lm] g77 generates incorrect code
   21863      * [507]13213 Hex constant problem when compiling with -fugly-logint
   21864        and -ftypeless-boz
   21865 
   21866     x86-specific (Intel/AMD)
   21867 
   21868      * [508]4490 ICE with -m128bit-long-double
   21869      * [509]12292 [x86_64] ICE: RTL check: expected code `const_int', have
   21870        `reg' in make_field_assignment, in combine.c
   21871      * [510]12441 ICE: can't find a register to spill
   21872      * [511]12943 array static-init failure under -fpic, -fPIC
   21873      * [512]13608 Incorrect code with -O3 -ffast-math
   21874 
   21875     PowerPC-specific
   21876 
   21877      * [513]11598 testcase gcc.dg/20020118-1.c fails runtime check of
   21878        __attribute__((aligned(16)))
   21879      * [514]11793 ICE in extract_insn, in recog.c (const_vector's)
   21880      * [515]12467 vmsumubm emitted when vmsummbm appropriate (typo in
   21881        altivec.md)
   21882      * [516]12537 g++ generates writeable text sections
   21883 
   21884     SPARC-specific
   21885 
   21886      * [517]12496 wrong result for __atomic_add(&value, -1) when using -O0
   21887        -m64
   21888      * [518]12865 mprotect call to make trampoline executable may fail
   21889      * [519]13354 ICE in sparc_emit_set_const32
   21890 
   21891     ARM-specific
   21892 
   21893      * [520]10467 [arm] ICE in pre_insert_copy_insn,
   21894 
   21895     ia64-specific
   21896 
   21897      * [521]11226 ICE passing struct arg with two floats
   21898      * [522]11227 ICE for _Complex float, _Complex long double args
   21899      * [523]12644 GCC 3.3.2 fails to compile glibc on ia64
   21900      * [524]13149 build gcc-3.3.2 1305 error:unrecognizable insn
   21901      * Various fixes for libunwind
   21902 
   21903     Alpha-specific
   21904 
   21905      * [525]12654 Incorrect comparison code generated for Alpha
   21906      * [526]12965 SEGV+ICE in cc1plus on alpha-linux with -O2
   21907      * [527]13031 ICE (unrecognizable insn) when building gnome-libs-1.4.2
   21908 
   21909     HPPA-specific
   21910 
   21911      * [528]11634 [hppa] ICE in verify_local_live_at_start, in flow.c
   21912      * [529]12158 [hppa] compilation does not terminate at -O1
   21913 
   21914     S390-specific
   21915 
   21916      * [530]11992 Wrong built-in code for memcmp with length 1<<24: only
   21917        (1<<24)-1 possible for CLCL-Instruction
   21918 
   21919     SH-specific
   21920 
   21921      * [531]9365 segfault in gen_far_branch (config/sh/sh.c)
   21922      * [532]10392 optimizer generates faulty array indexing
   21923      * [533]11322 SH profiler outputs multiple definitions of symbol
   21924      * [534]13069 gcc/config/sh/rtems.h broken
   21925      * [535]13302 Putting a va_list in a struct causes seg fault
   21926      * [536]13585 Incorrect optimization of call to sfunc
   21927      * Fix inappropriately exported libgcc functions from the shared
   21928        library
   21929 
   21930     Other embedded target specific
   21931 
   21932      * [537]8916 [mcore] unsigned char assign gets hosed.
   21933      * [538]11576 [h8300] ICE in change_address_1, in emit-rtl.c
   21934      * [539]13122 [h8300] local variable gets corrupted by function call
   21935        when -fomit-frame-pointer is given
   21936      * [540]13256 [cris] strict_low_part mistreated in delay slots
   21937      * [541]13373 [mcore] optimization with -frerun-cse-after-loop
   21938        -fexpensive-optimizations produces wrong code on mcore
   21939 
   21940     GNU HURD-specific
   21941 
   21942      * [542]12561 gcc/config/t-gnu needs updating to work with
   21943        --with-sysroot
   21944 
   21945     Tru64 Unix specific
   21946 
   21947      * [543]6243 testsuite fails almost all tests due to no libintl in
   21948        LD_LIBRARY_PATH during test.
   21949      * [544]11397 weak aliases broken on Tru64 UNIX
   21950 
   21951     AIX-specific
   21952 
   21953      * [545]12505 build failure due to defines of uchar in cpphash.h and
   21954        sys/types.h
   21955      * [546]13150 WEAK symbols not exported by collect2
   21956 
   21957     IRIX-specific
   21958 
   21959      * [547]12666 fixincludes problem on IRIX 6.5.19m
   21960 
   21961     Solaris-specific
   21962 
   21963      * [548]12969 Including sys/byteorder.h breaks configure checks
   21964 
   21965     Testsuite problems (compiler is not affected)
   21966 
   21967      * [549]10819 testsuite creates CR+LF on compiler version lines in
   21968        test summary files
   21969      * [550]11612 abi_check not finding correct libgcc_s.so.1
   21970 
   21971     Miscellaneous
   21972 
   21973      * [551]13211 using -###, incorrect warnings about unused linker file
   21974        are produced
   21975      __________________________________________________________________
   21976 
   21977 [552]GCC 3.3.4
   21978 
   21979    This is the [553]list of problem reports (PRs) from GCC's bug tracking
   21980    system that are known to be fixed in the 3.3.4 release. This list might
   21981    not be complete (that is, it is possible that some PRs that have been
   21982    fixed are not listed here).
   21983      __________________________________________________________________
   21984 
   21985 [554]GCC 3.3.5
   21986 
   21987    This is the [555]list of problem reports (PRs) from GCC's bug tracking
   21988    system that are known to be fixed in the 3.3.5 release. This list might
   21989    not be complete (that is, it is possible that some PRs that have been
   21990    fixed are not listed here).
   21991      __________________________________________________________________
   21992 
   21993 [556]GCC 3.3.6
   21994 
   21995    This is the [557]list of problem reports (PRs) from GCC's bug tracking
   21996    system that are known to be fixed in the 3.3.6 release. This list might
   21997    not be complete (that is, it is possible that some PRs that have been
   21998    fixed are not listed here).
   21999 
   22000 
   22001     For questions related to the use of GCC, please consult these web
   22002     pages and the [558]GCC manuals. If that fails, the
   22003     [559]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   22004     web pages and the development of GCC are welcome on our developer
   22005     list at [560]gcc (a] gcc.gnu.org. All of [561]our lists have public
   22006     archives.
   22007 
   22008    Copyright (C) [562]Free Software Foundation, Inc. Verbatim copying and
   22009    distribution of this entire article is permitted in any medium,
   22010    provided this notice is preserved.
   22011 
   22012    These pages are [563]maintained by the GCC team. Last modified
   22013    2025-01-31.
   22014 
   22015 References
   22016 
   22017    1. https://gcc.gnu.org/gcc-3.3/changes.html#3.3.6
   22018    2. https://gcc.gnu.org/gcc-3.1/changes.html#obsolete_systems
   22019    3. https://gcc.gnu.org/gcc-3.3/changes.html#obsolete_systems
   22020    4. https://gcc.gnu.org/gcc-3.3/changes.html#nonnull_attribute
   22021    5. https://gcc.gnu.org/news/dfa.html
   22022    6. https://gcc.gnu.org/c99status.html
   22023    7. https://gcc.gnu.org/onlinedocs/gcc-3.3.6/g77/News.html
   22024    8. https://gcc.gnu.org/gcc-3.3/changes.html#obsolete_systems
   22025    9. https://gcc.gnu.org/PR10140
   22026   10. https://gcc.gnu.org/PR10198
   22027   11. https://gcc.gnu.org/PR10338
   22028   12. https://gcc.gnu.org/PR3581
   22029   13. https://gcc.gnu.org/PR4382
   22030   14. https://gcc.gnu.org/PR5533
   22031   15. https://gcc.gnu.org/PR6387
   22032   16. https://gcc.gnu.org/PR6412
   22033   17. https://gcc.gnu.org/PR6620
   22034   18. https://gcc.gnu.org/PR6663
   22035   19. https://gcc.gnu.org/PR7068
   22036   20. https://gcc.gnu.org/PR7083
   22037   21. https://gcc.gnu.org/PR7647
   22038   22. https://gcc.gnu.org/PR7675
   22039   23. https://gcc.gnu.org/PR7718
   22040   24. https://gcc.gnu.org/PR8116
   22041   25. https://gcc.gnu.org/PR8358
   22042   26. https://gcc.gnu.org/PR8511
   22043   27. https://gcc.gnu.org/PR8564
   22044   28. https://gcc.gnu.org/PR8660
   22045   29. https://gcc.gnu.org/PR8766
   22046   30. https://gcc.gnu.org/PR8803
   22047   31. https://gcc.gnu.org/PR8846
   22048   32. https://gcc.gnu.org/PR8906
   22049   33. https://gcc.gnu.org/PR9216
   22050   34. https://gcc.gnu.org/PR9261
   22051   35. https://gcc.gnu.org/PR9263
   22052   36. https://gcc.gnu.org/PR9429
   22053   37. https://gcc.gnu.org/PR9516
   22054   38. https://gcc.gnu.org/PR9600
   22055   39. https://gcc.gnu.org/PR9629
   22056   40. https://gcc.gnu.org/PR9672
   22057   41. https://gcc.gnu.org/PR9749
   22058   42. https://gcc.gnu.org/PR9794
   22059   43. https://gcc.gnu.org/PR9829
   22060   44. https://gcc.gnu.org/PR9916
   22061   45. https://gcc.gnu.org/PR9936
   22062   46. https://gcc.gnu.org/PR10262
   22063   47. https://gcc.gnu.org/PR10278
   22064   48. https://gcc.gnu.org/PR10446
   22065   49. https://gcc.gnu.org/PR10451
   22066   50. https://gcc.gnu.org/PR10506
   22067   51. https://gcc.gnu.org/PR10549
   22068   52. https://gcc.gnu.org/PR2001
   22069   53. https://gcc.gnu.org/PR2391
   22070   54. https://gcc.gnu.org/PR2960
   22071   55. https://gcc.gnu.org/PR4046
   22072   56. https://gcc.gnu.org/PR6405
   22073   57. https://gcc.gnu.org/PR6798
   22074   58. https://gcc.gnu.org/PR6871
   22075   59. https://gcc.gnu.org/PR6909
   22076   60. https://gcc.gnu.org/PR7189
   22077   61. https://gcc.gnu.org/PR7642
   22078   62. https://gcc.gnu.org/PR8634
   22079   63. https://gcc.gnu.org/PR8750
   22080   64. https://gcc.gnu.org/PR2161
   22081   65. https://gcc.gnu.org/PR4319
   22082   66. https://gcc.gnu.org/PR8602
   22083   67. https://gcc.gnu.org/PR9177
   22084   68. https://gcc.gnu.org/PR9853
   22085   69. https://gcc.gnu.org/PR45
   22086   70. https://gcc.gnu.org/PR3784
   22087   71. https://gcc.gnu.org/PR764
   22088   72. https://gcc.gnu.org/PR5116
   22089   73. https://gcc.gnu.org/PR2862
   22090   74. https://gcc.gnu.org/PR3663
   22091   75. https://gcc.gnu.org/PR3797
   22092   76. https://gcc.gnu.org/PR3948
   22093   77. https://gcc.gnu.org/PR4137
   22094   78. https://gcc.gnu.org/PR4361
   22095   79. https://gcc.gnu.org/PR4802
   22096   80. https://gcc.gnu.org/PR5837
   22097   81. https://gcc.gnu.org/PR4803
   22098   82. https://gcc.gnu.org/PR5094
   22099   83. https://gcc.gnu.org/PR5730
   22100   84. https://gcc.gnu.org/PR6713
   22101   85. https://gcc.gnu.org/PR7015
   22102   86. https://gcc.gnu.org/PR7086
   22103   87. https://gcc.gnu.org/PR7099
   22104   88. https://gcc.gnu.org/PR7247
   22105   89. https://gcc.gnu.org/PR7441
   22106   90. https://gcc.gnu.org/PR7768
   22107   91. https://gcc.gnu.org/PR7804
   22108   92. https://gcc.gnu.org/PR8099
   22109   93. https://gcc.gnu.org/PR8117
   22110   94. https://gcc.gnu.org/PR8205
   22111   95. https://gcc.gnu.org/PR8645
   22112   96. https://gcc.gnu.org/PR8724
   22113   97. https://gcc.gnu.org/PR8805
   22114   98. https://gcc.gnu.org/PR8691
   22115   99. https://gcc.gnu.org/PR8700
   22116  100. https://gcc.gnu.org/PR8724
   22117  101. https://gcc.gnu.org/PR8949
   22118  102. https://gcc.gnu.org/PR9016
   22119  103. https://gcc.gnu.org/PR9053
   22120  104. https://gcc.gnu.org/PR9152
   22121  105. https://gcc.gnu.org/PR9182
   22122  106. https://gcc.gnu.org/PR9297
   22123  107. https://gcc.gnu.org/PR9318
   22124  108. https://gcc.gnu.org/PR9320
   22125  109. https://gcc.gnu.org/PR9400
   22126  110. https://gcc.gnu.org/PR9424
   22127  111. https://gcc.gnu.org/PR9425
   22128  112. https://gcc.gnu.org/PR9439
   22129  113. https://gcc.gnu.org/PR9474
   22130  114. https://gcc.gnu.org/PR9548
   22131  115. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#231
   22132  116. https://gcc.gnu.org/PR9555
   22133  117. https://gcc.gnu.org/PR9561
   22134  118. https://gcc.gnu.org/PR9563
   22135  119. https://gcc.gnu.org/PR9582
   22136  120. https://gcc.gnu.org/PR9622
   22137  121. https://gcc.gnu.org/PR9683
   22138  122. https://gcc.gnu.org/PR9791
   22139  123. https://gcc.gnu.org/PR9817
   22140  124. https://gcc.gnu.org/PR9825
   22141  125. https://gcc.gnu.org/PR9826
   22142  126. https://gcc.gnu.org/PR9924
   22143  127. https://gcc.gnu.org/PR9946
   22144  128. https://gcc.gnu.org/PR9964
   22145  129. https://gcc.gnu.org/PR9988
   22146  130. https://gcc.gnu.org/PR10033
   22147  131. https://gcc.gnu.org/PR10097
   22148  132. https://gcc.gnu.org/PR10132
   22149  133. https://gcc.gnu.org/PR10180
   22150  134. https://gcc.gnu.org/PR10199
   22151  135. https://gcc.gnu.org/PR10300
   22152  136. https://gcc.gnu.org/PR10427
   22153  137. https://gcc.gnu.org/PR10503
   22154  138. https://gcc.gnu.org/PR5956
   22155  139. https://gcc.gnu.org/PR1832
   22156  140. https://gcc.gnu.org/PR3924
   22157  141. https://gcc.gnu.org/PR5634
   22158  142. https://gcc.gnu.org/PR6367
   22159  143. https://gcc.gnu.org/PR6491
   22160  144. https://gcc.gnu.org/PR6742
   22161  145. https://gcc.gnu.org/PR7113
   22162  146. https://gcc.gnu.org/PR7236
   22163  147. https://gcc.gnu.org/PR7278
   22164  148. https://gcc.gnu.org/PR7384
   22165  149. https://gcc.gnu.org/PR7388
   22166  150. https://gcc.gnu.org/PR8587
   22167  151. https://gcc.gnu.org/PR9038
   22168  152. https://gcc.gnu.org/PR10197
   22169  153. https://gcc.gnu.org/PR6005
   22170  154. https://gcc.gnu.org/PR6389
   22171  155. https://gcc.gnu.org/PR6576
   22172  156. https://gcc.gnu.org/PR6652
   22173  157. https://gcc.gnu.org/PR7060
   22174  158. https://gcc.gnu.org/PR7073
   22175  159. https://gcc.gnu.org/PR7180
   22176  160. https://gcc.gnu.org/PR7416
   22177  161. https://gcc.gnu.org/PR7570
   22178  162. https://gcc.gnu.org/PR7578
   22179  163. https://gcc.gnu.org/PR7611
   22180  164. https://gcc.gnu.org/PR7709
   22181  165. https://gcc.gnu.org/PR7766
   22182  166. https://gcc.gnu.org/PR7785
   22183  167. https://gcc.gnu.org/PR7786
   22184  168. https://gcc.gnu.org/PR8142
   22185  169. https://gcc.gnu.org/PR8234
   22186  170. https://gcc.gnu.org/PR8415
   22187  171. https://gcc.gnu.org/PR8481
   22188  172. https://gcc.gnu.org/PR8593
   22189  173. https://gcc.gnu.org/PR8759
   22190  174. https://gcc.gnu.org/PR8997
   22191  175. https://gcc.gnu.org/PR9253
   22192  176. https://gcc.gnu.org/PR9254
   22193  177. https://gcc.gnu.org/PR9271
   22194  178. https://gcc.gnu.org/PR6767
   22195  179. https://gcc.gnu.org/PR9911
   22196  180. https://gcc.gnu.org/PR10020
   22197  181. https://gcc.gnu.org/PR10546
   22198  182. https://gcc.gnu.org/PR7029
   22199  183. https://gcc.gnu.org/PR2903
   22200  184. https://gcc.gnu.org/PR7873
   22201  185. https://gcc.gnu.org/PR7680
   22202  186. https://gcc.gnu.org/PR8705
   22203  187. https://gcc.gnu.org/PR9986
   22204  188. https://gcc.gnu.org/PR10056
   22205  189. https://gcc.gnu.org/PR6744
   22206  190. https://gcc.gnu.org/PR7361
   22207  191. https://gcc.gnu.org/PR9496
   22208  192. https://gcc.gnu.org/PR7067
   22209  193. https://gcc.gnu.org/PR8480
   22210  194. https://gcc.gnu.org/PR8784
   22211  195. https://gcc.gnu.org/PR10315
   22212  196. https://gcc.gnu.org/PR10267
   22213  197. https://gcc.gnu.org/PR7916
   22214  198. https://gcc.gnu.org/PR7926
   22215  199. https://gcc.gnu.org/PR8555
   22216  200. https://gcc.gnu.org/PR8994
   22217  201. https://gcc.gnu.org/PR9426
   22218  202. https://gcc.gnu.org/PR9806
   22219  203. https://gcc.gnu.org/PR10077
   22220  204. https://gcc.gnu.org/PR10233
   22221  205. https://gcc.gnu.org/PR10286
   22222  206. https://gcc.gnu.org/PR10308
   22223  207. https://gcc.gnu.org/gcc-3.3/changes.html#GCC3.3.1
   22224  208. https://gcc.gnu.org/PR11272
   22225  209. https://gcc.gnu.org/PR5754
   22226  210. https://gcc.gnu.org/PR6597
   22227  211. https://gcc.gnu.org/PR6949
   22228  212. https://gcc.gnu.org/PR7053
   22229  213. https://gcc.gnu.org/PR8164
   22230  214. https://gcc.gnu.org/PR8384
   22231  215. https://gcc.gnu.org/PR9559
   22232  216. https://gcc.gnu.org/PR9649
   22233  217. https://gcc.gnu.org/PR9864
   22234  218. https://gcc.gnu.org/PR10432
   22235  219. https://gcc.gnu.org/PR10475
   22236  220. https://gcc.gnu.org/PR10635
   22237  221. https://gcc.gnu.org/PR10661
   22238  222. https://gcc.gnu.org/PR10700
   22239  223. https://gcc.gnu.org/PR10712
   22240  224. https://gcc.gnu.org/PR10796
   22241  225. https://gcc.gnu.org/PR10890
   22242  226. https://gcc.gnu.org/PR10939
   22243  227. https://gcc.gnu.org/PR10956
   22244  228. https://gcc.gnu.org/PR11041
   22245  229. https://gcc.gnu.org/PR11059
   22246  230. https://gcc.gnu.org/PR11083
   22247  231. https://gcc.gnu.org/PR11105
   22248  232. https://gcc.gnu.org/PR11149
   22249  233. https://gcc.gnu.org/PR11228
   22250  234. https://gcc.gnu.org/PR11282
   22251  235. https://gcc.gnu.org/PR11301
   22252  236. https://gcc.gnu.org/PR11308
   22253  237. https://gcc.gnu.org/PR11473
   22254  238. https://gcc.gnu.org/PR11503
   22255  239. https://gcc.gnu.org/PR11513
   22256  240. https://gcc.gnu.org/PR11198
   22257  241. https://gcc.gnu.org/PR11304
   22258  242. https://gcc.gnu.org/PR11381
   22259  243. https://gcc.gnu.org/PR11536
   22260  244. https://gcc.gnu.org/PR11557
   22261  245. https://gcc.gnu.org/PR5897
   22262  246. https://gcc.gnu.org/PR11279
   22263  247. https://gcc.gnu.org/PR11022
   22264  248. https://gcc.gnu.org/PR2330
   22265  249. https://gcc.gnu.org/PR5388
   22266  250. https://gcc.gnu.org/PR5390
   22267  251. https://gcc.gnu.org/PR7877
   22268  252. https://gcc.gnu.org/PR9393
   22269  253. https://gcc.gnu.org/PR10032
   22270  254. https://gcc.gnu.org/PR10468
   22271  255. https://gcc.gnu.org/PR10527
   22272  256. https://gcc.gnu.org/PR10679
   22273  257. https://gcc.gnu.org/PR10682
   22274  258. https://gcc.gnu.org/PR10689
   22275  259. https://gcc.gnu.org/PR10845
   22276  260. https://gcc.gnu.org/PR10849
   22277  261. https://gcc.gnu.org/PR10888
   22278  262. https://gcc.gnu.org/PR10929
   22279  263. https://gcc.gnu.org/PR10931
   22280  264. https://gcc.gnu.org/PR10940
   22281  265. https://gcc.gnu.org/PR10968
   22282  266. https://gcc.gnu.org/PR10990
   22283  267. https://gcc.gnu.org/PR11039
   22284  268. https://gcc.gnu.org/PR11062
   22285  269. https://gcc.gnu.org/PR11095
   22286  270. https://gcc.gnu.org/PR11098
   22287  271. https://gcc.gnu.org/PR11137
   22288  272. https://gcc.gnu.org/PR11154
   22289  273. https://gcc.gnu.org/PR11329
   22290  274. https://gcc.gnu.org/PR11332
   22291  275. https://gcc.gnu.org/PR11431
   22292  276. https://gcc.gnu.org/PR11528
   22293  277. https://gcc.gnu.org/PR11546
   22294  278. https://gcc.gnu.org/PR11567
   22295  279. https://gcc.gnu.org/PR11645
   22296  280. https://gcc.gnu.org/PR5179
   22297  281. https://gcc.gnu.org/PR8204
   22298  282. https://gcc.gnu.org/PR10838
   22299  283. https://gcc.gnu.org/PR10886
   22300  284. https://gcc.gnu.org/PR11349
   22301  285. https://gcc.gnu.org/PR4823
   22302  286. https://gcc.gnu.org/PR8878
   22303  287. https://gcc.gnu.org/PR9815
   22304  288. https://gcc.gnu.org/PR10402
   22305  289. https://gcc.gnu.org/PR10504
   22306  290. https://gcc.gnu.org/PR10673
   22307  291. https://gcc.gnu.org/PR11044
   22308  292. https://gcc.gnu.org/PR11089
   22309  293. https://gcc.gnu.org/PR11420
   22310  294. https://gcc.gnu.org/PR9362
   22311  295. https://gcc.gnu.org/PR10142
   22312  296. https://gcc.gnu.org/PR10663
   22313  297. https://gcc.gnu.org/PR10835
   22314  298. https://gcc.gnu.org/PR10876
   22315  299. https://gcc.gnu.org/PR10955
   22316  300. https://gcc.gnu.org/PR11018
   22317  301. https://gcc.gnu.org/PR11556
   22318  302. https://gcc.gnu.org/PR10907
   22319  303. https://gcc.gnu.org/PR11320
   22320  304. https://gcc.gnu.org/PR11599
   22321  305. https://gcc.gnu.org/PR9745
   22322  306. https://gcc.gnu.org/PR10871
   22323  307. https://gcc.gnu.org/PR11440
   22324  308. https://gcc.gnu.org/PR7594
   22325  309. https://gcc.gnu.org/PR10557
   22326  310. https://gcc.gnu.org/PR11054
   22327  311. https://gcc.gnu.org/PR10834
   22328  312. https://gcc.gnu.org/PR10842
   22329  313. https://gcc.gnu.org/PR11052
   22330  314. https://gcc.gnu.org/PR11183
   22331  315. https://gcc.gnu.org/PR11084
   22332  316. https://gcc.gnu.org/PR10331
   22333  317. https://gcc.gnu.org/PR10413
   22334  318. https://gcc.gnu.org/PR11096
   22335  319. https://gcc.gnu.org/PR2873
   22336  320. https://gcc.gnu.org/PR3163
   22337  321. https://gcc.gnu.org/PR5287
   22338  322. https://gcc.gnu.org/PR10148
   22339  323. https://gcc.gnu.org/PR8787
   22340  324. https://gcc.gnu.org/PR10900
   22341  325. https://gcc.gnu.org/PR1607
   22342  326. https://gcc.gnu.org/PR4252
   22343  327. https://gcc.gnu.org/PR4490
   22344  328. https://gcc.gnu.org/PR10355
   22345  329. https://gcc.gnu.org/PR10726
   22346  330. https://gcc.gnu.org/PR10805
   22347  331. https://gcc.gnu.org/PR10815
   22348  332. https://gcc.gnu.org/PR10877
   22349  333. https://gcc.gnu.org/PR11280
   22350  334. https://gcc.gnu.org/PR11466
   22351  335. https://gcc.gnu.org/PR10737
   22352  336. https://gcc.gnu.org/PR10810
   22353  337. https://gcc.gnu.org/gcc-3.3/changes.html#GCC3.3.2
   22354  338. https://gcc.gnu.org/PR8336
   22355  339. https://gcc.gnu.org/PR9330
   22356  340. https://gcc.gnu.org/PR9631
   22357  341. https://gcc.gnu.org/PR9877
   22358  342. https://gcc.gnu.org/PR11687
   22359  343. https://gcc.gnu.org/PR12263
   22360  344. https://gcc.gnu.org/PR12490
   22361  345. https://gcc.gnu.org/PR7277
   22362  346. https://gcc.gnu.org/PR7939
   22363  347. https://gcc.gnu.org/PR11063
   22364  348. https://gcc.gnu.org/PR11207
   22365  349. https://gcc.gnu.org/PR11522
   22366  350. https://gcc.gnu.org/PR11595
   22367  351. https://gcc.gnu.org/PR11646
   22368  352. https://gcc.gnu.org/PR11665
   22369  353. https://gcc.gnu.org/PR11852
   22370  354. https://gcc.gnu.org/PR11878
   22371  355. https://gcc.gnu.org/PR11883
   22372  356. https://gcc.gnu.org/PR11991
   22373  357. https://gcc.gnu.org/PR12146
   22374  358. https://gcc.gnu.org/PR12215
   22375  359. https://gcc.gnu.org/PR12369
   22376  360. https://gcc.gnu.org/PR12446
   22377  361. https://gcc.gnu.org/PR12510
   22378  362. https://gcc.gnu.org/PR12544
   22379  363. https://gcc.gnu.org/PR9862
   22380  364. https://gcc.gnu.org/PR10962
   22381  365. https://gcc.gnu.org/PR11370
   22382  366. https://gcc.gnu.org/PR11637
   22383  367. https://gcc.gnu.org/PR11885
   22384  368. https://gcc.gnu.org/PR12082
   22385  369. https://gcc.gnu.org/PR12180
   22386  370. https://gcc.gnu.org/PR12340
   22387  371. https://gcc.gnu.org/PR3907
   22388  372. https://gcc.gnu.org/PR5293
   22389  373. https://gcc.gnu.org/PR5296
   22390  374. https://gcc.gnu.org/PR7939
   22391  375. https://gcc.gnu.org/PR8656
   22392  376. https://gcc.gnu.org/PR10147
   22393  377. https://gcc.gnu.org/PR11400
   22394  378. https://gcc.gnu.org/PR11409
   22395  379. https://gcc.gnu.org/PR11740
   22396  380. https://gcc.gnu.org/PR11786
   22397  381. https://gcc.gnu.org/PR11867
   22398  382. https://gcc.gnu.org/PR11928
   22399  383. https://gcc.gnu.org/PR12114
   22400  384. https://gcc.gnu.org/PR12163
   22401  385. https://gcc.gnu.org/PR12181
   22402  386. https://gcc.gnu.org/PR12236
   22403  387. https://gcc.gnu.org/PR12266
   22404  388. https://gcc.gnu.org/PR12296
   22405  389. https://gcc.gnu.org/PR12298
   22406  390. https://gcc.gnu.org/PR12369
   22407  391. https://gcc.gnu.org/PR12337
   22408  392. https://gcc.gnu.org/PR12344
   22409  393. https://gcc.gnu.org/PR12451
   22410  394. https://gcc.gnu.org/PR12486
   22411  395. https://gcc.gnu.org/PR8869
   22412  396. https://gcc.gnu.org/PR9786
   22413  397. https://gcc.gnu.org/PR11689
   22414  398. https://gcc.gnu.org/PR12116
   22415  399. https://gcc.gnu.org/PR12070
   22416  400. https://gcc.gnu.org/PR11184
   22417  401. https://gcc.gnu.org/PR11535
   22418  402. https://gcc.gnu.org/PR11693
   22419  403. https://gcc.gnu.org/PR12224
   22420  404. https://gcc.gnu.org/PR11087
   22421  405. https://gcc.gnu.org/PR11319
   22422  406. https://gcc.gnu.org/PR11949
   22423  407. https://gcc.gnu.org/PR11662
   22424  408. https://gcc.gnu.org/PR11965
   22425  409. https://gcc.gnu.org/PR12301
   22426  410. https://gcc.gnu.org/PR11717
   22427  411. https://gcc.gnu.org/PR11313
   22428  412. https://gcc.gnu.org/PR11712
   22429  413. https://gcc.gnu.org/PR12166
   22430  414. https://gcc.gnu.org/PR12101
   22431  415. https://gcc.gnu.org/PR10988
   22432  416. https://gcc.gnu.org/PR11805
   22433  417. https://gcc.gnu.org/PR11902
   22434  418. https://gcc.gnu.org/PR11903
   22435  419. https://gcc.gnu.org/gcc-3.3/changes.html#GCC3.3.3
   22436  420. https://gcc.gnu.org/PR11890
   22437  421. https://gcc.gnu.org/PR12399
   22438  422. https://gcc.gnu.org/PR13068
   22439  423. https://gcc.gnu.org/PR10060
   22440  424. https://gcc.gnu.org/PR10555
   22441  425. https://gcc.gnu.org/PR10706
   22442  426. https://gcc.gnu.org/PR11496
   22443  427. https://gcc.gnu.org/PR11741
   22444  428. https://gcc.gnu.org/PR12440
   22445  429. https://gcc.gnu.org/PR12632
   22446  430. https://gcc.gnu.org/PR12712
   22447  431. https://gcc.gnu.org/PR12726
   22448  432. https://gcc.gnu.org/PR12890
   22449  433. https://gcc.gnu.org/PR12900
   22450  434. https://gcc.gnu.org/PR13060
   22451  435. https://gcc.gnu.org/PR13289
   22452  436. https://gcc.gnu.org/PR13318
   22453  437. https://gcc.gnu.org/PR13392
   22454  438. https://gcc.gnu.org/PR13574
   22455  439. https://gcc.gnu.org/PR13475
   22456  440. https://gcc.gnu.org/PR13797
   22457  441. https://gcc.gnu.org/PR13824
   22458  442. https://gcc.gnu.org/PR8776
   22459  443. https://gcc.gnu.org/PR10339
   22460  444. https://gcc.gnu.org/PR11350
   22461  445. https://gcc.gnu.org/PR12826
   22462  446. https://gcc.gnu.org/PR12500
   22463  447. https://gcc.gnu.org/PR12941
   22464  448. https://gcc.gnu.org/PR12953
   22465  449. https://gcc.gnu.org/PR13041
   22466  450. https://gcc.gnu.org/PR13507
   22467  451. https://gcc.gnu.org/PR13382
   22468  452. https://gcc.gnu.org/PR13394
   22469  453. https://gcc.gnu.org/PR13400
   22470  454. https://gcc.gnu.org/PR13521
   22471  455. https://gcc.gnu.org/PR2094
   22472  456. https://gcc.gnu.org/PR2294
   22473  457. https://gcc.gnu.org/PR5050
   22474  458. https://gcc.gnu.org/PR9371
   22475  459. https://gcc.gnu.org/PR9546
   22476  460. https://gcc.gnu.org/PR10081
   22477  461. https://gcc.gnu.org/PR10093
   22478  462. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#61
   22479  463. https://gcc.gnu.org/PR10095
   22480  464. https://gcc.gnu.org/PR11554
   22481  465. https://gcc.gnu.org/PR12297
   22482  466. https://gcc.gnu.org/PR12352
   22483  467. https://gcc.gnu.org/PR12438
   22484  468. https://gcc.gnu.org/PR12540
   22485  469. https://gcc.gnu.org/PR12594
   22486  470. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#60
   22487  471. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#63
   22488  472. https://gcc.gnu.org/PR12657
   22489  473. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#292
   22490  474. https://gcc.gnu.org/PR12696
   22491  475. https://gcc.gnu.org/PR12815
   22492  476. https://gcc.gnu.org/PR12862
   22493  477. https://gcc.gnu.org/PR12926
   22494  478. https://gcc.gnu.org/PR12967
   22495  479. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html
   22496  480. https://gcc.gnu.org/PR12971
   22497  481. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#328
   22498  482. https://gcc.gnu.org/PR13007
   22499  483. https://gcc.gnu.org/PR13009
   22500  484. https://gcc.gnu.org/PR13057
   22501  485. https://gcc.gnu.org/PR13070
   22502  486. https://gcc.gnu.org/PR13081
   22503  487. https://gcc.gnu.org/PR13239
   22504  488. https://gcc.gnu.org/PR13262
   22505  489. https://gcc.gnu.org/PR13290
   22506  490. https://gcc.gnu.org/PR13323
   22507  491. https://gcc.gnu.org/PR13369
   22508  492. https://gcc.gnu.org/PR13371
   22509  493. https://gcc.gnu.org/PR13445
   22510  494. https://gcc.gnu.org/PR13461
   22511  495. https://gcc.gnu.org/PR13462
   22512  496. https://gcc.gnu.org/PR13478
   22513  497. https://gcc.gnu.org/PR13544
   22514  498. https://gcc.gnu.org/PR13650
   22515  499. https://gcc.gnu.org/PR13683
   22516  500. https://gcc.gnu.org/PR13688
   22517  501. https://gcc.gnu.org/PR13774
   22518  502. https://gcc.gnu.org/PR13884
   22519  503. https://gcc.gnu.org/PR10746
   22520  504. https://gcc.gnu.org/PR11433
   22521  505. https://gcc.gnu.org/PR12633
   22522  506. https://gcc.gnu.org/PR13037
   22523  507. https://gcc.gnu.org/PR13213
   22524  508. https://gcc.gnu.org/PR4490
   22525  509. https://gcc.gnu.org/PR12292
   22526  510. https://gcc.gnu.org/PR12441
   22527  511. https://gcc.gnu.org/PR12943
   22528  512. https://gcc.gnu.org/PR13608
   22529  513. https://gcc.gnu.org/PR11598
   22530  514. https://gcc.gnu.org/PR11793
   22531  515. https://gcc.gnu.org/PR12467
   22532  516. https://gcc.gnu.org/PR12537
   22533  517. https://gcc.gnu.org/PR12496
   22534  518. https://gcc.gnu.org/PR12865
   22535  519. https://gcc.gnu.org/PR13354
   22536  520. https://gcc.gnu.org/PR10467
   22537  521. https://gcc.gnu.org/PR11226
   22538  522. https://gcc.gnu.org/PR11227
   22539  523. https://gcc.gnu.org/PR12644
   22540  524. https://gcc.gnu.org/PR13149
   22541  525. https://gcc.gnu.org/PR12654
   22542  526. https://gcc.gnu.org/PR12965
   22543  527. https://gcc.gnu.org/PR13031
   22544  528. https://gcc.gnu.org/PR11634
   22545  529. https://gcc.gnu.org/PR12158
   22546  530. https://gcc.gnu.org/PR11992
   22547  531. https://gcc.gnu.org/PR9365
   22548  532. https://gcc.gnu.org/PR10392
   22549  533. https://gcc.gnu.org/PR11322
   22550  534. https://gcc.gnu.org/PR13069
   22551  535. https://gcc.gnu.org/PR13302
   22552  536. https://gcc.gnu.org/PR13585
   22553  537. https://gcc.gnu.org/PR8916
   22554  538. https://gcc.gnu.org/PR11576
   22555  539. https://gcc.gnu.org/PR13122
   22556  540. https://gcc.gnu.org/PR13256
   22557  541. https://gcc.gnu.org/PR13373
   22558  542. https://gcc.gnu.org/PR12561
   22559  543. https://gcc.gnu.org/PR6243
   22560  544. https://gcc.gnu.org/PR11397
   22561  545. https://gcc.gnu.org/PR12505
   22562  546. https://gcc.gnu.org/PR13150
   22563  547. https://gcc.gnu.org/PR12666
   22564  548. https://gcc.gnu.org/PR12969
   22565  549. https://gcc.gnu.org/PR10819
   22566  550. https://gcc.gnu.org/PR11612
   22567  551. https://gcc.gnu.org/PR13211
   22568  552. https://gcc.gnu.org/gcc-3.3/changes.html#GCC3.3.4
   22569  553. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.3.4
   22570  554. https://gcc.gnu.org/gcc-3.3/changes.html#GCC3.3.5
   22571  555. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.3.5
   22572  556. https://gcc.gnu.org/gcc-3.3/changes.html#GCC3.3.6
   22573  557. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.3.6
   22574  558. https://gcc.gnu.org/onlinedocs/
   22575  559. mailto:gcc-help (a] gcc.gnu.org
   22576  560. mailto:gcc (a] gcc.gnu.org
   22577  561. https://gcc.gnu.org/lists.html
   22578  562. https://www.fsf.org/
   22579  563. https://gcc.gnu.org/about.html
   22580 ======================================================================
   22581 http://gcc.gnu.org/gcc-3.2/index.html
   22582 
   22583                              GCC 3.2 Release Series
   22584 
   22585    (This release series is no longer supported.)
   22586 
   22587    April 25, 2003
   22588 
   22589    The [1]GNU project and the GCC developers are pleased to announce the
   22590    release of GCC 3.2.3.
   22591 
   22592    The purpose of the GCC 3.2 release series is to provide a stable
   22593    platform for OS distributors to use building their next releases. A
   22594    primary objective was to stabilize the C++ ABI; we believe that the
   22595    interface to the compiler and the C++ standard library are now
   22596    relatively stable.
   22597 
   22598    Be aware that C++ code compiled by GCC 3.2.x will (in general) not
   22599    interoperate with code compiled by GCC 3.1.1 or earlier.
   22600 
   22601    Please refer to our [2]detailed list of news, caveats, and bug-fixes
   22602    for further information.
   22603 
   22604 Release History
   22605 
   22606    GCC 3.2.3
   22607           April 25, 2003 ([3]changes)
   22608 
   22609    GCC 3.2.2
   22610           February 5, 2003 ([4]changes)
   22611 
   22612    GCC 3.2.1
   22613           November 19, 2002 ([5]changes)
   22614 
   22615    GCC 3.2
   22616           August 14, 2002 ([6]changes)
   22617 
   22618 References and Acknowledgements
   22619 
   22620    GCC used to stand for the GNU C Compiler, but since the compiler
   22621    supports several other languages aside from C, it now stands for the
   22622    GNU Compiler Collection.
   22623 
   22624    A list of [7]successful builds is updated as new information becomes
   22625    available.
   22626 
   22627    The GCC developers would like to thank the numerous people that have
   22628    contributed new features, improvements, bug fixes, and other changes as
   22629    well as test results to GCC. This [8]amazing group of volunteers is
   22630    what makes GCC successful.
   22631 
   22632    For additional information about GCC please refer to the [9]GCC project
   22633    web site or contact the [10]GCC development mailing list.
   22634 
   22635    To obtain GCC please use [11]our mirror sites, or our CVS server.
   22636 
   22637 
   22638     For questions related to the use of GCC, please consult these web
   22639     pages and the [12]GCC manuals. If that fails, the
   22640     [13]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   22641     web pages and the development of GCC are welcome on our developer
   22642     list at [14]gcc (a] gcc.gnu.org. All of [15]our lists have public
   22643     archives.
   22644 
   22645    Copyright (C) [16]Free Software Foundation, Inc. Verbatim copying and
   22646    distribution of this entire article is permitted in any medium,
   22647    provided this notice is preserved.
   22648 
   22649    These pages are [17]maintained by the GCC team. Last modified
   22650    2022-10-26.
   22651 
   22652 References
   22653 
   22654    1. http://www.gnu.org/
   22655    2. https://gcc.gnu.org/gcc-3.2/changes.html
   22656    3. https://gcc.gnu.org/gcc-3.2/changes.html#3.2.3
   22657    4. https://gcc.gnu.org/gcc-3.2/changes.html#3.2.2
   22658    5. https://gcc.gnu.org/gcc-3.2/changes.html#3.2.1
   22659    6. https://gcc.gnu.org/gcc-3.2/changes.html#3.2
   22660    7. https://gcc.gnu.org/gcc-3.2/buildstat.html
   22661    8. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   22662    9. https://gcc.gnu.org/index.html
   22663   10. mailto:gcc (a] gcc.gnu.org
   22664   11. https://gcc.gnu.org/mirrors.html
   22665   12. https://gcc.gnu.org/onlinedocs/
   22666   13. mailto:gcc-help (a] gcc.gnu.org
   22667   14. mailto:gcc (a] gcc.gnu.org
   22668   15. https://gcc.gnu.org/lists.html
   22669   16. https://www.fsf.org/
   22670   17. https://gcc.gnu.org/about.html
   22671 ======================================================================
   22672 http://gcc.gnu.org/gcc-3.2/changes.html
   22673 
   22674                              GCC 3.2 Release Series
   22675                         Changes, New Features, and Fixes
   22676 
   22677    The latest release in the 3.2 release series is [1]GCC 3.2.3.
   22678 
   22679 Caveats and New Features
   22680 
   22681   Caveats
   22682 
   22683      * The C++ compiler does not correctly zero-initialize
   22684        pointers-to-data members. You must explicitly initialize them. For
   22685        example: int S::*m(0); will work, but depending on
   22686        default-initialization to zero will not work. This bug cannot be
   22687        fixed in GCC 3.2 without inducing unacceptable risks. It will be
   22688        fixed in GCC 3.3.
   22689      * This GCC release is based on the GCC 3.1 sourcebase, and thus has
   22690        all the [2]changes in the GCC 3.1 series. In addition, GCC 3.2 has
   22691        a number of C++ ABI fixes which make its C++ compiler generate
   22692        binary code which is incompatible with the C++ compilers found in
   22693        earlier GCC releases, including GCC 3.1 and GCC 3.1.1.
   22694 
   22695   Frontend Enhancements
   22696 
   22697     C/C++/Objective-C
   22698 
   22699      * The method of constructing the list of directories to be searched
   22700        for header files has been revised. If a directory named by a -I
   22701        option is a standard system include directory, the option is
   22702        ignored to ensure that the default search order for system
   22703        directories and the special treatment of system header files are
   22704        not defeated.
   22705      * The C and Objective-C compilers no longer accept the "Naming Types"
   22706        extension (typedef foo = bar); it was already unavailable in C++.
   22707        Code which uses it will need to be changed to use the "typeof"
   22708        extension instead: typedef typeof(bar) foo. (We have removed this
   22709        extension without a period of deprecation because it has caused the
   22710        compiler to crash since version 3.0 and no one noticed until very
   22711        recently. Thus we conclude it is not in widespread use.)
   22712 
   22713     C++
   22714 
   22715      * GCC 3.2 fixed several differences between the C++ ABI implemented
   22716        in GCC and the multi-vendor standard, but more have been found
   22717        since the release. 3.2.1 adds a new warning, -Wabi, to warn about
   22718        code which is affected by these bugs. We will fix these bugs in
   22719        some future release, once we are confident that all have been
   22720        found; until then, it is our intention to make changes to the ABI
   22721        only if they are necessary for correct compilation of C++, as
   22722        opposed to conformance to the ABI documents.
   22723      * For details on how to build an ABI compliant compiler for GNU/Linux
   22724        systems, check the [3]common C++ ABI page.
   22725 
   22726   New Targets and Target Specific Improvements
   22727 
   22728     IA-32
   22729 
   22730      * Fixed a number of bugs in SSE and MMX intrinsics.
   22731      * Fixed common compiler crashes with SSE instruction set enabled
   22732        (implied by -march=pentium3, pentium4, athlon-xp)
   22733      * __m128 and __m128i is not 128bit aligned when used in structures.
   22734 
   22735     x86-64
   22736 
   22737      * A bug whereby the compiler could generate bad code for bzero has
   22738        been fixed.
   22739      * ABI fixes (implying ABI incompatibilities with previous version in
   22740        some corner cases)
   22741      * Fixed prefetch code generation
   22742      __________________________________________________________________
   22743 
   22744 [4]GCC 3.2.3
   22745 
   22746    3.2.3 is a bug fix release only; there are no new features that were
   22747    not present in GCC 3.2.2.
   22748 
   22749   Bug Fixes
   22750 
   22751    This section lists the problem reports (PRs) from GCC's bug tracking
   22752    system that are known to be fixed in the 3.2.3 release. This list might
   22753    not be complete (that is, it is possible that some PRs that have been
   22754    fixed are not listed here), and some of the titles have been changed to
   22755    make them more clear.
   22756 
   22757     Internal Compiler Errors (multi-platform)
   22758 
   22759      * [5]3782: (c++) -quiet -fstats produces a segmentation fault in
   22760        cc1plus
   22761      * [6]6440: (c++) template specializations cause ICE
   22762      * [7]7050: (c++) ICE on: (i ? get_string() : throw)
   22763      * [8]7741: ICE on conflicting types (make_decl_rtl in varasm.c)
   22764      * [9]7982: (c++) ICE due to infinite recursion (using STL set)
   22765      * [10]8068: exceedingly high (infinite) memory usage
   22766      * [11]8178: ICE with __builtin_ffs
   22767      * [12]8396: ICE in copy_to_mode_reg, in explow.c
   22768      * [13]8674: (c++) ICE in cp_expr_size, in cp/cp-lang.c
   22769      * [14]9768: ICE when optimizing inline code at -O2
   22770      * [15]9798: (c++) Infinite recursion (segfault) in
   22771        cp/decl.c:push_using_directive with recursive using directives
   22772      * [16]9799: mismatching structure initializer with nested flexible
   22773        array member: ICE
   22774      * [17]9928: ICE on duplicate enum declaration
   22775      * [18]10114: ICE in mem_loc_descriptor, in dwarf2out.c (affects
   22776        sparc, alpha)
   22777      * [19]10352: ICE in find_reloads_toplev
   22778      * [20]10336: ICE with -Wunreachable-code
   22779 
   22780     C/optimizer bugs:
   22781 
   22782      * [21]8224: Incorrect joining of signed and unsigned division
   22783      * [22]8613: -O2 produces wrong code with builtin strlen and
   22784        postincrements
   22785      * [23]8828: gcc reports some code is unreachable when it is not
   22786      * [24]9226: GCSE breaking argument passing
   22787      * [25]9853: miscompilation of non-constant structure initializer
   22788      * [26]9797: C99-style struct initializers are miscompiled
   22789      * [27]9967: Some standard C function calls should not be replaced
   22790        when optimizing for size
   22791      * [28]10116: ce2: invalid merge of join_bb in the context of switch
   22792        statements
   22793      * [29]10171: wrong code for inlined function
   22794      * [30]10175: -Wunreachable-code doesn't work for single lines
   22795 
   22796     C++ compiler and library:
   22797 
   22798      * [31]8316: Confusing diagnostic for code that misuses conversion
   22799        operators
   22800      * [32]9169: filebuf output fails if codecvt<>::out returns noconv
   22801      * [33]9420: incomplete type incorrectly reported
   22802      * [34]9459: typeof in return type specification of template not
   22803        supported
   22804      * [35]9507: filebuf::open handles ios_base::ate incorrectly
   22805      * [36]9538: Out-of-bounds memory access in streambuf::sputbackc
   22806      * [37]9602: Total confusion about template/friend/virtual/abstract
   22807      * [38]9993: destructor not called for local object created within and
   22808        returned from infinite loop
   22809      * [39]10167: ieee_1003.1-2001 locale specialisations on a glibc-2.3.2
   22810        system
   22811 
   22812     Java compiler and library:
   22813 
   22814      * [40]9652: libgcj build fails on irix6.5.1[78]
   22815      * [41]10144: gas on solaris complains about bad .stabs lines for
   22816        java, native as unaffected
   22817 
   22818     x86-specific (Intel/AMD):
   22819 
   22820      * [42]8746: gcc miscompiles Linux kernel ppa driver on x86
   22821      * [43]9888: -mcpu=k6 -Os produces out of range loop instructions
   22822      * [44]9638: Cross-build for target i386-elf and i586-pc-linux-gnu
   22823        failed
   22824      * [45]9954: Cross-build for target i586-pc-linux-gnu (--with-newlib)
   22825        failed
   22826 
   22827     SPARC-specific:
   22828 
   22829      * [46]7784: [Sparc] ICE in extract_insn, in recog.c
   22830      * [47]7796: sparc extra failure with -m64 on execute/930921-1.c in
   22831        unroll.c
   22832      * [48]8281: ICE when compiling with -O2 -fPIC for Ultrasparc
   22833      * [49]8366: [Sparc] C testsuite failure with -m64 -fpic -O in
   22834        execute/loop-2d.c
   22835      * [50]8726: gcc -O2 miscompiles Samba 2.2.7 on 32-bit sparc
   22836      * [51]9414: Scheduling bug on Ultrasparc
   22837      * [52]10067: GCC-3.2.2 outputs invalid asm on sparc64
   22838 
   22839     m68k-specific:
   22840 
   22841      * [53]7248: broken "inclusive or" code
   22842      * [54]8343: m68k-elf/rtems ICE at instantiate_virtual_regs_1
   22843 
   22844     PowerPC-specific:
   22845 
   22846      * [55]9732: Wrong code with -O2 -fPIC
   22847      * [56]10073: ICE: powerpc cannot split insn
   22848 
   22849     Alpha-specific:
   22850 
   22851      * [57]7702: optimization problem on a DEC alpha under OSF1
   22852      * [58]9671: gcc.3.2.2 does not build on a HP Tru64 Unix v5.1B system
   22853 
   22854     HP-specific:
   22855 
   22856      * [59]8694: <string> breaks <ctype.h> on HP-UX 10.20 (DUP: 9275)
   22857      * [60]9953: (ada) gcc 3.2.x can't build 3.3-branch ada on HP-UX 10
   22858        (missing symbol)
   22859      * [61]10271: Floating point args don't get reloaded across function
   22860        calls with -O2
   22861 
   22862     MIPS specific:
   22863 
   22864      * [62]6362: mips-irix6 gcc-3.1 C testsuite failure with -mips4 in
   22865        compile/920501-4.c
   22866 
   22867     CRIS specific:
   22868 
   22869      * [63]10377: gcc-3.2.2 creates bad assembler code for cris
   22870 
   22871     Miscellaneous and minor bugs:
   22872 
   22873      * [64]6955: collect2 says "core dumped" when there is no core
   22874      __________________________________________________________________
   22875 
   22876 [65]GCC 3.2.2
   22877 
   22878    Beginning with 3.2.2, GCC's Makefile suite supports redirection of make
   22879    install by means of the DESTDIR variable. Parts of the GCC tree have
   22880    featured that support long before, but now it is available even from
   22881    the top level.
   22882 
   22883    Other than that, GCC 3.2.2 is a bug fix release only; there are no new
   22884    features that were not present in GCC 3.2.1.
   22885 
   22886   Bug Fixes
   22887 
   22888    On the following i386-based systems GCC 3.2.1 broke the C ABI wrt.
   22889    functions returning structures: Cygwin, FreeBSD (GCC 3.2.1 as shipped
   22890    with FreeBSD 5.0 does not have this problem), Interix, a.out-based
   22891    GNU/Linux and NetBSD, OpenBSD, and Darwin. GCC 3.2.2 reverts this ABI
   22892    change, and thus restores ABI-compatibility with previous releases
   22893    (except GCC 3.2.1) on these platforms.
   22894 
   22895    This section lists the problem reports (PRs) from GCC's bug tracking
   22896    system that are known to be fixed in the 3.2.2 release. This list might
   22897    not be complete (that is, it is possible that some PRs that have been
   22898    fixed are not listed here) and some of the titles have been changed to
   22899    make them more clear.
   22900 
   22901     Internal Compiler Errors (multi-platform)
   22902 
   22903      * [66]5919: (c++) ICE when passing variable array to template
   22904        function
   22905      * [67]7129: (c++) ICE with min/max assignment operators (<?= and >?=)
   22906      * [68]7507: ICE with -O2 when address of called function is a
   22907        complicated expression
   22908      * [69]7622: ICE with nested inline functions if function's address is
   22909        taken
   22910      * [70]7681: (fortran) ICE in compensate_edge, in reg-stack.c (also PR
   22911        [71]9258)
   22912      * [72]8031: (c++) ICE in code comparing typeids and casting from
   22913        virtual base
   22914      * [73]8275: ICE in simplify_subreg
   22915      * [74]8332: (c++) builtin strlen/template interaction causes ICE
   22916      * [75]8372: (c++) ICE on explicit call of destructor
   22917      * [76]8439: (c, not c++) empty struct causes ICE
   22918      * [77]8442: (c++) ICE with nested template classes
   22919      * [78]8518: ICE when compiling mplayer ("extern inline" issue)
   22920      * [79]8615: (c++) ICE with out-of-range character constant template
   22921        argument
   22922      * [80]8663: (c++) ICE in cp_expr_size, at cp-lang.c:307
   22923      * [81]8799: (c++) ICE: error reporting routines re-entered
   22924      * [82]9328: (c++) ICE with typeof(X) for overloaded X
   22925      * [83]9465: (preprocessor) cpp -traditional ICE on null bytes
   22926 
   22927     C++ (compiler and library) bugs
   22928 
   22929      * [84]47: scoping in nested classes is broken
   22930      * [85]6745: problems with iostream rdbuf() member function
   22931      * [86]8214: conversion from const char* const to char* sometimes
   22932        accepted illegally
   22933      * [87]8493: builtin strlen and overload resolution (same bug as
   22934        [88]8332)
   22935      * [89]8503: strange behaviour of function types
   22936      * [90]8727: compiler confused by inheritance from an anonymous struct
   22937      * [91]7445: poor performance of std::locale::classic() in
   22938        multi-threaded applications
   22939      * [92]8230: mishandling of overflow in vector<T>::resize
   22940      * [93]8399: sync_with_stdio(false) breaks unformatted input
   22941      * [94]8662: illegal access of private member of unnamed class is
   22942        accepted
   22943      * [95]8707: "make distclean" fails in libstdc++-v3 directory
   22944      * [96]8708: __USE_MALLOC doesn't work
   22945      * [97]8790: Use of non-thread-safe strtok in src/localename.cc
   22946      * [98]8887: Bug in date formats with --enable-clocale=generic
   22947      * [99]9076: Call Frame Instructions are not handled correctly during
   22948        unwind operation
   22949      * [100]9151: std::setprecision limited to 16 digits when outputting a
   22950        double to a stream
   22951      * [101]9168: codecvt<char, char, mbstate_t> overwrites output buffers
   22952      * [102]9269: libstdc++ headers: explicit specialization of function
   22953        must precede its first use
   22954      * [103]9322: return value of basic_streambuf<>::getloc affected by
   22955        locale::global
   22956      * [104]9433: segfault in runtime support for dynamic_cast
   22957 
   22958     C and optimizer bugs
   22959 
   22960      * [105]8032: GCC incorrectly initializes static structs that have
   22961        flexible arrays
   22962      * [106]8639: simple arithmetic expression broken
   22963      * [107]8794: optimization improperly eliminates certain expressions
   22964      * [108]8832: traditional "asm volatile" code is illegally optimized
   22965      * [109]8988: loop optimizer bug: with -O2, code is generated that
   22966        segfaults (found on i386, bug present for all platforms)
   22967      * [110]9492: structure copy clobbers subsequent stores to structure
   22968 
   22969     Objective-C bugs
   22970 
   22971      * [111]9267: Objective-C parser won't build with newer bison versions
   22972        (e.g. 1.875)
   22973 
   22974     Ada bugs
   22975 
   22976      * [112]8344: Ada build problem due to conflict between gcc/final.o,
   22977        gcc/ada/final.o
   22978 
   22979     Preprocessor bugs
   22980 
   22981      * [113]8524: _Pragma within macros is improperly expanded
   22982      * [114]8880: __WCHAR_TYPE__ macro incorrectly set to "long int" with
   22983        -fshort-wchar
   22984 
   22985     ARM-specific
   22986 
   22987      * [115]9090: arm ICE with >= -O2; regression from gcc-2.95
   22988 
   22989     x86-specific (Intel/AMD)
   22990 
   22991      * [116]8588: ICE in extract_insn, at recog.c:NNNN (shift instruction)
   22992      * [117]8599: loop unroll bug with -march=k6-3
   22993      * [118]9506: ABI breakage in structure return (affects BSD and
   22994        Cygwin, but not GNU/Linux)
   22995 
   22996     FreeBSD 5.0 specific
   22997 
   22998      * [119]9484: GCC 3.2.1 Bootstrap failure on FreeBSD 5.0
   22999 
   23000     RTEMS-specific
   23001 
   23002      * [120]9292: hppa1.1-rtems configurery problems
   23003      * [121]9293: [m68k-elf/rtems] config/m68k/t-crtstuff bug
   23004      * [122]9295: [mips-rtems] config/mips/rtems.h init/fini issue
   23005      * [123]9296: gthr-rtems regression
   23006      * [124]9316: powerpc-rtems: extending multilibs
   23007 
   23008     HP-PA specific
   23009 
   23010      * [125]9493: ICE with -O2 when building a simple function
   23011 
   23012     Documentation
   23013 
   23014      * [126]7341: hyperlink to gcov in GCC documentation doesn't work
   23015      * [127]8947: Please add a warning about "-malign-double" in docs
   23016      * [128]7448, [129]8882: typo cleanups
   23017      __________________________________________________________________
   23018 
   23019 [130]GCC 3.2.1
   23020 
   23021    3.2.1 adds a new warning, -Wabi. This option warns when GNU C++
   23022    generates code that is known not to be binary-compatible with the
   23023    vendor-neutral ia32/ia64 ABI. Please consult the GCC manual, included
   23024    in the distribution, for details.
   23025 
   23026    This release also removes an old GCC extension, "naming types", and the
   23027    documentation now directs users to use a different GCC extension,
   23028    __typeof__, instead. The feature had evidently been broken for a while.
   23029 
   23030    Otherwise, 3.2.1 is a bug fix release only; other than bug fixes and
   23031    the new warning there are no new features that were not present in GCC
   23032    3.2.
   23033 
   23034    In addition, the previous fix for [131]PR 7445 (poor performance of
   23035    std::locale::classic() in multi-threaded applications) was reverted
   23036    ("unfixed"), because the "fix" was not thread-safe.
   23037 
   23038   Bug Fixes
   23039 
   23040    This section lists the problem reports (PRs) from GCC's bug tracking
   23041    system that are known to be fixed in the 3.2.1 release. This list might
   23042    not be complete (that is, it is possible that some PRs that have been
   23043    fixed are not listed here). As you can see, the number of bug fixes is
   23044    quite large, so it is strongly recommended that users of earlier GCC
   23045    3.x releases upgrade to GCC 3.2.1.
   23046 
   23047     Internal Compiler Errors (multi-platform)
   23048 
   23049      * [132]2521: (c++) ICE in build_ptrmemfunc, in cp/typeck.c
   23050      * [133]5661: (c++) ICE instantiating template on array of unknown
   23051        size (bad code)
   23052      * [134]6419: (c++) ICE in make_decl_rtl for "longest" attribute on
   23053        64-bit platforms
   23054      * [135]6994: (c++) ICE in find_function_data
   23055      * [136]7150: preprocessor: GCC -dM -E gives an ICE
   23056      * [137]7160: ICE when optimizing branches without a return value
   23057      * [138]7228: (c++) ICE when using member template and template
   23058        function
   23059      * [139]7266: (c++) ICE with -pedantic on missing typename
   23060      * [140]7353: ICE from use of "Naming Types" extension, see above
   23061      * [141]7411: ICE in instantiate_virtual_regs_1, in function.c
   23062      * [142]7478: (c++) ICE on static_cast inside template
   23063      * [143]7526: preprocessor core dump when _Pragma implies #pragma
   23064        dependency
   23065      * [144]7721: (c++) ICE on simple (but incorrect) template ([145]7803
   23066        is a duplicate)
   23067      * [146]7754: (c++) ICE on union with template parameter
   23068      * [147]7788: (c++) redeclaring a definition as an incomplete class
   23069        causes ICE
   23070      * [148]8031: (c++) ICE in comptypes, in cp/typeck.c
   23071      * [149]8055: preprocessor dies with SIG11 when building FreeBSD
   23072        kernel
   23073      * [150]8067: (c++) ICE due to mishandling of __FUNCTION__ and related
   23074        variables
   23075      * [151]8134: (c++) ICE in force_store_init_value on legal code
   23076      * [152]8149: (c++) ICE on incomplete type
   23077      * [153]8160: (c++) ICE in build_modify_expr, in cp/typeck.c: array
   23078        initialization
   23079 
   23080     C++ (compiler and library) bugs
   23081 
   23082      * [154]5607: No pointer adjustment in covariant return types
   23083      * [155]6579: Infinite loop with statement expressions in member
   23084        initialization
   23085      * [156]6803: Default copy constructor bug in GCC 3.1
   23086      * [157]7176: g++ confused by friend and static member with same name
   23087      * [158]7188: Segfault with template class and recursive (incorrect)
   23088        initializer list
   23089      * [159]7306: Regression: GCC 3.x fails to compile code with virtual
   23090        inheritance if a method has a variable number of arguments
   23091      * [160]7461: ctype<char>::classic_table() returns offset array on
   23092        Cygwin
   23093      * [161]7524: f(const float arg[3]) fails
   23094      * [162]7584: Erroneous ambiguous base error on using declaration
   23095      * [163]7676: Member template overloading problem
   23096      * [164]7679: infinite loop when a right parenthesis is missing
   23097      * [165]7811: default locale not taken from environment
   23098      * [166]7961: compare( char *) implemented incorrectly in
   23099        basic_string<>
   23100      * [167]8071: basic_ostream::operator<<(streambuf*) loops forever if
   23101        streambuf::underflow() leaves gptr() NULL (dups: [168]8127,
   23102        [169]6745)
   23103      * [170]8096: deque::at() throws std::range_error instead of
   23104        std::out_of_range
   23105      * [171]8127: cout << cin.rdbuf() infinite loop
   23106      * [172]8218: Excessively large memory consumed for classes with large
   23107        array members
   23108      * [173]8287: GCC 3.2: Destructor called for non-constructed local
   23109        object
   23110      * [174]8347: empty vector range used in string construction causes
   23111        core dump
   23112      * [175]8348: fail() flag is set in istringstream when eof() flag is
   23113        set
   23114      * [176]8391: regression: infinite loop in cp/decl2.c(finish_file)
   23115 
   23116     C and optimizer bugs
   23117 
   23118      * [177]6627: -fno-align-functions doesn't seem to disable function
   23119        alignment
   23120      * [178]6631: life_analysis misoptimizes code to initialize fields of
   23121        a structure
   23122      * [179]7102: unsigned char division results in floating exception
   23123      * [180]7120: Run once loop should *always* be unrolled
   23124        (pessimization)
   23125      * [181]7209: Bug involving array referencing and ?: operator
   23126      * [182]7515: invalid inlining of global function with -O3
   23127      * [183]7814: incorrect scheduling for glibc-2.2.92 strcpy test
   23128      * [184]8467: bug in sibling call optimization
   23129 
   23130     Preprocessor bugs
   23131 
   23132      * [185]4890: incorrect line markers from the traditional preprocessor
   23133      * [186]7357: -M option omits system headers files (making it the same
   23134        as -MM)
   23135      * [187]7358: Changes to Sun's make Dependencies
   23136      * [188]7602: C++ header files found in CPLUS_INCLUDE_PATH treated as
   23137        C headers
   23138      * [189]7862: Interrupting GCC -MD removes .d file but not .o
   23139      * [190]8190: Failed compilation deletes -MD dependency file
   23140      * [191]8524: _Pragma within macro is improperly expanded
   23141 
   23142     x86 specific (Intel/AMD)
   23143 
   23144      * [192]5351: (i686-only) function pass-by-value structure copy
   23145        corrupts stack ([193]7591 is a duplicate)
   23146      * [194]6845, [195]7034, [196]7124, [197]7174: ICE's with
   23147        -march=pentium3/pentium2/athlon (these are all the same underlying
   23148        bug, in MMX register use)
   23149      * [198]7134, [199]7375, [200]7390: ICE with -march=athlon (maybe same
   23150        as above?)
   23151      * [201]6890: xmmintrin.h, _MM_TRANSPOSE4_PS is broken
   23152      * [202]6981: wrong code in 64-bit manipulation on x86
   23153      * [203]7242: GCC -mcpu=pentium[23] doesn't define __tune_pentiumpro__
   23154        macro
   23155      * [204]7396: ix86: cmpgt_ss, cmpge_ss, cmpngt_ss, and cmpnge_ss SSE
   23156        intrinsics are broken
   23157      * [205]7630: GCC 3.2 breaks on Mozilla 1.0's JS sources with
   23158        -march=pentium4
   23159      * [206]7693: Typo in i386 mmintrin.h header
   23160      * [207]7723: ICE - Pentium3 sse - GCC 3.2
   23161      * [208]7951: ICE on -march=pentium4 -O2 -mfpmath=sse
   23162      * [209]8146: (i686 only) gcc 3.2 miscompiles gcc 2.95.3
   23163 
   23164     PowerPC specific
   23165 
   23166      * [210]5967: GCC bug when profiling nested functions on powerpc
   23167      * [211]6984: wrong code generated with -O2, -O3, -Os for do-while
   23168        loop on PowerPC
   23169      * [212]7114: PowerPC: ICE building strcoll.op from glibc-2.2.5
   23170      * [213]7130: miscompiled code for GCC-3.1 on
   23171        powerpc-unknown-linux-gnu with -funroll-all-loops
   23172      * [214]7133: PowerPC ICE: unrecognizable insn
   23173      * [215]7380: ICE in extract_insn, at recog.c:2148
   23174      * [216]8252: ICE on Altivec code with optimization turned on
   23175      * [217]8451: Altivec ICE in GCC 3.2
   23176 
   23177     HP/PA specific
   23178 
   23179      * [218]7250: __ashrdi3 returns wrong value on 32 bit hppa
   23180 
   23181     SPARC specific
   23182 
   23183      * [219]6668: when using --disable-multilib, libgcc_s.so is installed
   23184        in the wrong place on sparc-solaris
   23185      * [220]7151: ICE when compiling for UltraSPARC
   23186      * [221]7335: SPARC: ICE in verify_wide_reg (flow.c:557) with long
   23187        double and -O1
   23188      * [222]7842: [REGRESSION] SPARC code gen bug
   23189 
   23190     ARM specific
   23191 
   23192      * [223]7856: [arm] invalid offset in constant pool reference
   23193      * [224]7967: optimization produces wrong code (ARM)
   23194 
   23195     Alpha specific
   23196 
   23197      * [225]7374: __builtin_fabsl broken on alpha
   23198 
   23199     IBM s390 specific
   23200 
   23201      * [226]7370: ICE in fixup_var_refs_1 on s390x
   23202      * [227]7409: loop optimization bug on s390x-linux-gnu
   23203      * [228]8232: s390x: ICE when using bcmp with int length argument
   23204 
   23205     SCO specific
   23206 
   23207      * [229]7623: SCO OpenServer build fails with machmode.def: undefined
   23208        symbol: BITS_PER_UNIT
   23209 
   23210     m68k/Coldfire specific
   23211 
   23212      * [230]8314: crtbegin, crtend need to be multilib'ed for this
   23213        platform
   23214 
   23215     Documentation
   23216 
   23217      * [231]761: Document some undocumented options
   23218      * [232]5610: Fix documentation about invoking SSE instructions
   23219        (-mfpmath=sse)
   23220      * [233]7484: List -Wmissing-declarations as C-only option
   23221      * [234]7531: -mcmodel not documented for x86-64
   23222      * [235]8120: Update documentation of bad use of ##
   23223      __________________________________________________________________
   23224 
   23225 [236]GCC 3.2
   23226 
   23227    3.2 is a small bug fix release, but there is a change to the
   23228    application binary interface (ABI), hence the change to the second part
   23229    of the version number.
   23230 
   23231    The main purpose of the 3.2 release is to correct a couple of problems
   23232    in the C++ ABI, with the intention of providing a stable interface
   23233    going forward.  Accordingly, 3.2 is only a small change to 3.1.1.
   23234 
   23235   Bug Fixes
   23236 
   23237     C++
   23238 
   23239      * [237]7320: g++ 3.2 relocation problem
   23240      * [238]7470: vtable: virtual function pointers not in declaration
   23241        order
   23242 
   23243     libstdc++
   23244 
   23245      * [239]6410: Trouble with non-ASCII monetary symbols and wchar_t
   23246      * [240]6503, [241]6642, [242]7186: Problems with comparing or
   23247        subtracting various types of const and non-const iterators
   23248      * [243]7216: ambiguity with basic_iostream::traits_type
   23249      * [244]7220: problem with basic_istream::ignore(0,delimiter)
   23250      * [245]7222: locale::operator==() doesn't work on std::locale("")
   23251      * [246]7286: placement operator delete issue
   23252      * [247]7442: cxxabi.h does not match the C++ ABI
   23253      * [248]7445: poor performance of std::locale::classic() in
   23254        multi-threaded applications
   23255 
   23256     x86-64 specific
   23257 
   23258      * [249]7291: off-by-one in generated inline bzero code for x86-64
   23259 
   23260 
   23261     For questions related to the use of GCC, please consult these web
   23262     pages and the [250]GCC manuals. If that fails, the
   23263     [251]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   23264     web pages and the development of GCC are welcome on our developer
   23265     list at [252]gcc (a] gcc.gnu.org. All of [253]our lists have public
   23266     archives.
   23267 
   23268    Copyright (C) [254]Free Software Foundation, Inc. Verbatim copying and
   23269    distribution of this entire article is permitted in any medium,
   23270    provided this notice is preserved.
   23271 
   23272    These pages are [255]maintained by the GCC team. Last modified
   23273    2025-04-08.
   23274 
   23275 References
   23276 
   23277    1. https://gcc.gnu.org/gcc-3.2/changes.html#3.2.3
   23278    2. https://gcc.gnu.org/gcc-3.1/changes.html
   23279    3. https://gcc.gnu.org/gcc-3.2/c++-abi.html
   23280    4. https://gcc.gnu.org/gcc-3.2/changes.html#GCC3.2.3
   23281    5. https://gcc.gnu.org/PR3782
   23282    6. https://gcc.gnu.org/PR6440
   23283    7. https://gcc.gnu.org/PR7050
   23284    8. https://gcc.gnu.org/PR7741
   23285    9. https://gcc.gnu.org/PR7982
   23286   10. https://gcc.gnu.org/PR8068
   23287   11. https://gcc.gnu.org/PR8178
   23288   12. https://gcc.gnu.org/PR8396
   23289   13. https://gcc.gnu.org/PR8674
   23290   14. https://gcc.gnu.org/PR9768
   23291   15. https://gcc.gnu.org/PR9798
   23292   16. https://gcc.gnu.org/PR9799
   23293   17. https://gcc.gnu.org/PR9928
   23294   18. https://gcc.gnu.org/PR10114
   23295   19. https://gcc.gnu.org/PR10352
   23296   20. https://gcc.gnu.org/PR10336
   23297   21. https://gcc.gnu.org/PR8224
   23298   22. https://gcc.gnu.org/PR8613
   23299   23. https://gcc.gnu.org/PR8828
   23300   24. https://gcc.gnu.org/PR9226
   23301   25. https://gcc.gnu.org/PR9853
   23302   26. https://gcc.gnu.org/PR9797
   23303   27. https://gcc.gnu.org/PR9967
   23304   28. https://gcc.gnu.org/PR10116
   23305   29. https://gcc.gnu.org/PR10171
   23306   30. https://gcc.gnu.org/PR10175
   23307   31. https://gcc.gnu.org/PR8316
   23308   32. https://gcc.gnu.org/PR9169
   23309   33. https://gcc.gnu.org/PR9420
   23310   34. https://gcc.gnu.org/PR9459
   23311   35. https://gcc.gnu.org/PR9507
   23312   36. https://gcc.gnu.org/PR9538
   23313   37. https://gcc.gnu.org/PR9602
   23314   38. https://gcc.gnu.org/PR9993
   23315   39. https://gcc.gnu.org/PR10167
   23316   40. https://gcc.gnu.org/PR9652
   23317   41. https://gcc.gnu.org/PR10144
   23318   42. https://gcc.gnu.org/PR8746
   23319   43. https://gcc.gnu.org/PR9888
   23320   44. https://gcc.gnu.org/PR9638
   23321   45. https://gcc.gnu.org/PR9954
   23322   46. https://gcc.gnu.org/PR7784
   23323   47. https://gcc.gnu.org/PR7796
   23324   48. https://gcc.gnu.org/PR8281
   23325   49. https://gcc.gnu.org/PR8366
   23326   50. https://gcc.gnu.org/PR8726
   23327   51. https://gcc.gnu.org/PR9414
   23328   52. https://gcc.gnu.org/PR10067
   23329   53. https://gcc.gnu.org/PR7248
   23330   54. https://gcc.gnu.org/PR8343
   23331   55. https://gcc.gnu.org/PR9732
   23332   56. https://gcc.gnu.org/PR10073
   23333   57. https://gcc.gnu.org/PR7702
   23334   58. https://gcc.gnu.org/PR9671
   23335   59. https://gcc.gnu.org/PR8694
   23336   60. https://gcc.gnu.org/PR9953
   23337   61. https://gcc.gnu.org/PR10271
   23338   62. https://gcc.gnu.org/PR6362
   23339   63. https://gcc.gnu.org/PR10377
   23340   64. https://gcc.gnu.org/PR6955
   23341   65. https://gcc.gnu.org/gcc-3.2/changes.html#GCC3.2.2
   23342   66. https://gcc.gnu.org/PR5919
   23343   67. https://gcc.gnu.org/PR7129
   23344   68. https://gcc.gnu.org/PR7507
   23345   69. https://gcc.gnu.org/PR7622
   23346   70. https://gcc.gnu.org/PR7681
   23347   71. https://gcc.gnu.org/PR9528
   23348   72. https://gcc.gnu.org/PR8031
   23349   73. https://gcc.gnu.org/PR8275
   23350   74. https://gcc.gnu.org/PR8332
   23351   75. https://gcc.gnu.org/PR8372
   23352   76. https://gcc.gnu.org/PR8439
   23353   77. https://gcc.gnu.org/PR8442
   23354   78. https://gcc.gnu.org/PR8518
   23355   79. https://gcc.gnu.org/PR8615
   23356   80. https://gcc.gnu.org/PR8663
   23357   81. https://gcc.gnu.org/PR8799
   23358   82. https://gcc.gnu.org/PR9328
   23359   83. https://gcc.gnu.org/PR9465
   23360   84. https://gcc.gnu.org/PR47
   23361   85. https://gcc.gnu.org/PR6745
   23362   86. https://gcc.gnu.org/PR8214
   23363   87. https://gcc.gnu.org/PR8493
   23364   88. https://gcc.gnu.org/PR8332
   23365   89. https://gcc.gnu.org/PR8503
   23366   90. https://gcc.gnu.org/PR8727
   23367   91. https://gcc.gnu.org/PR7445
   23368   92. https://gcc.gnu.org/PR8230
   23369   93. https://gcc.gnu.org/PR8399
   23370   94. https://gcc.gnu.org/PR8662
   23371   95. https://gcc.gnu.org/PR8707
   23372   96. https://gcc.gnu.org/PR8708
   23373   97. https://gcc.gnu.org/PR8790
   23374   98. https://gcc.gnu.org/PR8887
   23375   99. https://gcc.gnu.org/PR9076
   23376  100. https://gcc.gnu.org/PR9151
   23377  101. https://gcc.gnu.org/PR9168
   23378  102. https://gcc.gnu.org/PR9269
   23379  103. https://gcc.gnu.org/PR9322
   23380  104. https://gcc.gnu.org/PR9433
   23381  105. https://gcc.gnu.org/PR8032
   23382  106. https://gcc.gnu.org/PR8639
   23383  107. https://gcc.gnu.org/PR8794
   23384  108. https://gcc.gnu.org/PR8832
   23385  109. https://gcc.gnu.org/PR8988
   23386  110. https://gcc.gnu.org/PR9492
   23387  111. https://gcc.gnu.org/PR9267
   23388  112. https://gcc.gnu.org/PR8344
   23389  113. https://gcc.gnu.org/PR8524
   23390  114. https://gcc.gnu.org/PR8880
   23391  115. https://gcc.gnu.org/PR9090
   23392  116. https://gcc.gnu.org/PR8588
   23393  117. https://gcc.gnu.org/PR8599
   23394  118. https://gcc.gnu.org/PR9506
   23395  119. https://gcc.gnu.org/PR9484
   23396  120. https://gcc.gnu.org/PR9292
   23397  121. https://gcc.gnu.org/PR9293
   23398  122. https://gcc.gnu.org/PR9295
   23399  123. https://gcc.gnu.org/PR9296
   23400  124. https://gcc.gnu.org/PR9316
   23401  125. https://gcc.gnu.org/PR9493
   23402  126. https://gcc.gnu.org/PR7341
   23403  127. https://gcc.gnu.org/PR8947
   23404  128. https://gcc.gnu.org/PR7448
   23405  129. https://gcc.gnu.org/PR8882
   23406  130. https://gcc.gnu.org/gcc-3.2/changes.html#GCC3.2.1
   23407  131. https://gcc.gnu.org/PR7445
   23408  132. https://gcc.gnu.org/PR2521
   23409  133. https://gcc.gnu.org/PR5661
   23410  134. https://gcc.gnu.org/PR6419
   23411  135. https://gcc.gnu.org/PR6994
   23412  136. https://gcc.gnu.org/PR7150
   23413  137. https://gcc.gnu.org/PR7160
   23414  138. https://gcc.gnu.org/PR7228
   23415  139. https://gcc.gnu.org/PR7266
   23416  140. https://gcc.gnu.org/PR7353
   23417  141. https://gcc.gnu.org/PR7411
   23418  142. https://gcc.gnu.org/PR7478
   23419  143. https://gcc.gnu.org/PR7526
   23420  144. https://gcc.gnu.org/PR7721
   23421  145. https://gcc.gnu.org/PR7803
   23422  146. https://gcc.gnu.org/PR7754
   23423  147. https://gcc.gnu.org/PR7788
   23424  148. https://gcc.gnu.org/PR8031
   23425  149. https://gcc.gnu.org/PR8055
   23426  150. https://gcc.gnu.org/PR8067
   23427  151. https://gcc.gnu.org/PR8134
   23428  152. https://gcc.gnu.org/PR8149
   23429  153. https://gcc.gnu.org/PR8160
   23430  154. https://gcc.gnu.org/PR5607
   23431  155. https://gcc.gnu.org/PR6579
   23432  156. https://gcc.gnu.org/PR6803
   23433  157. https://gcc.gnu.org/PR7176
   23434  158. https://gcc.gnu.org/PR7188
   23435  159. https://gcc.gnu.org/PR7306
   23436  160. https://gcc.gnu.org/PR7461
   23437  161. https://gcc.gnu.org/PR7524
   23438  162. https://gcc.gnu.org/PR7584
   23439  163. https://gcc.gnu.org/PR7676
   23440  164. https://gcc.gnu.org/PR7679
   23441  165. https://gcc.gnu.org/PR7811
   23442  166. https://gcc.gnu.org/PR7961
   23443  167. https://gcc.gnu.org/PR8071
   23444  168. https://gcc.gnu.org/PR8127
   23445  169. https://gcc.gnu.org/PR6745
   23446  170. https://gcc.gnu.org/PR8096
   23447  171. https://gcc.gnu.org/PR8127
   23448  172. https://gcc.gnu.org/PR8218
   23449  173. https://gcc.gnu.org/PR8287
   23450  174. https://gcc.gnu.org/PR8347
   23451  175. https://gcc.gnu.org/PR8348
   23452  176. https://gcc.gnu.org/PR8391
   23453  177. https://gcc.gnu.org/PR6627
   23454  178. https://gcc.gnu.org/PR6631
   23455  179. https://gcc.gnu.org/PR7102
   23456  180. https://gcc.gnu.org/PR7120
   23457  181. https://gcc.gnu.org/PR7209
   23458  182. https://gcc.gnu.org/PR7515
   23459  183. https://gcc.gnu.org/PR7814
   23460  184. https://gcc.gnu.org/PR8467
   23461  185. https://gcc.gnu.org/PR4890
   23462  186. https://gcc.gnu.org/PR7357
   23463  187. https://gcc.gnu.org/PR7358
   23464  188. https://gcc.gnu.org/PR7602
   23465  189. https://gcc.gnu.org/PR7862
   23466  190. https://gcc.gnu.org/PR8190
   23467  191. https://gcc.gnu.org/PR8524
   23468  192. https://gcc.gnu.org/PR5351
   23469  193. https://gcc.gnu.org/PR7591
   23470  194. https://gcc.gnu.org/PR6845
   23471  195. https://gcc.gnu.org/PR7034
   23472  196. https://gcc.gnu.org/PR7124
   23473  197. https://gcc.gnu.org/PR7174
   23474  198. https://gcc.gnu.org/PR7134
   23475  199. https://gcc.gnu.org/PR7375
   23476  200. https://gcc.gnu.org/PR7390
   23477  201. https://gcc.gnu.org/PR6890
   23478  202. https://gcc.gnu.org/PR6981
   23479  203. https://gcc.gnu.org/PR7242
   23480  204. https://gcc.gnu.org/PR7396
   23481  205. https://gcc.gnu.org/PR7630
   23482  206. https://gcc.gnu.org/PR7693
   23483  207. https://gcc.gnu.org/PR7723
   23484  208. https://gcc.gnu.org/PR7951
   23485  209. https://gcc.gnu.org/PR8146
   23486  210. https://gcc.gnu.org/PR5967
   23487  211. https://gcc.gnu.org/PR6984
   23488  212. https://gcc.gnu.org/PR7114
   23489  213. https://gcc.gnu.org/PR7130
   23490  214. https://gcc.gnu.org/PR7133
   23491  215. https://gcc.gnu.org/PR7380
   23492  216. https://gcc.gnu.org/PR8252
   23493  217. https://gcc.gnu.org/PR8451
   23494  218. https://gcc.gnu.org/PR7250
   23495  219. https://gcc.gnu.org/PR6668
   23496  220. https://gcc.gnu.org/PR7151
   23497  221. https://gcc.gnu.org/PR7335
   23498  222. https://gcc.gnu.org/PR7842
   23499  223. https://gcc.gnu.org/PR7856
   23500  224. https://gcc.gnu.org/PR7967
   23501  225. https://gcc.gnu.org/PR7374
   23502  226. https://gcc.gnu.org/PR7370
   23503  227. https://gcc.gnu.org/PR7409
   23504  228. https://gcc.gnu.org/PR8232
   23505  229. https://gcc.gnu.org/PR7623
   23506  230. https://gcc.gnu.org/PR8314
   23507  231. https://gcc.gnu.org/PR761
   23508  232. https://gcc.gnu.org/PR5610
   23509  233. https://gcc.gnu.org/PR7484
   23510  234. https://gcc.gnu.org/PR7531
   23511  235. https://gcc.gnu.org/PR8120
   23512  236. https://gcc.gnu.org/gcc-3.2/changes.html#GCC3.2
   23513  237. https://gcc.gnu.org/PR7320
   23514  238. https://gcc.gnu.org/PR7470
   23515  239. https://gcc.gnu.org/PR6410
   23516  240. https://gcc.gnu.org/PR6503
   23517  241. https://gcc.gnu.org/PR6642
   23518  242. https://gcc.gnu.org/PR7186
   23519  243. https://gcc.gnu.org/PR7216
   23520  244. https://gcc.gnu.org/PR7220
   23521  245. https://gcc.gnu.org/PR7222
   23522  246. https://gcc.gnu.org/PR7286
   23523  247. https://gcc.gnu.org/PR7442
   23524  248. https://gcc.gnu.org/PR7445
   23525  249. https://gcc.gnu.org/PR7291
   23526  250. https://gcc.gnu.org/onlinedocs/
   23527  251. mailto:gcc-help (a] gcc.gnu.org
   23528  252. mailto:gcc (a] gcc.gnu.org
   23529  253. https://gcc.gnu.org/lists.html
   23530  254. https://www.fsf.org/
   23531  255. https://gcc.gnu.org/about.html
   23532 ======================================================================
   23533 http://gcc.gnu.org/gcc-3.1/index.html
   23534 
   23535                                     GCC 3.1
   23536 
   23537    (This release series is no longer supported.)
   23538 
   23539    July 27, 2002
   23540 
   23541    The GNU project and the GCC developers are pleased to announce the
   23542    release of GCC 3.1.1.
   23543 
   23544    The links below still apply to GCC 3.1.1.
   23545 
   23546    May 15, 2002
   23547 
   23548    The [1]GNU project and the GCC developers are pleased to announce the
   23549    release of GCC 3.1.
   23550 
   23551    GCC used to stand for the GNU C Compiler, but since the compiler
   23552    supports several other languages aside from C, it now stands for the
   23553    GNU Compiler Collection.
   23554 
   23555    A list of [2]successful builds is updated as new information becomes
   23556    available.
   23557 
   23558    The GCC developers would like to thank the numerous people that have
   23559    contributed [3]new features, improvements, bug fixes, and other changes
   23560    as well as test results to GCC. This [4]amazing group of volunteers is
   23561    what makes GCC successful.
   23562 
   23563    For additional information about GCC please refer to the [5]GCC project
   23564    web site or contact the [6]GCC development mailing list.
   23565 
   23566    To obtain GCC please use [7]our mirror sites, or our CVS server.
   23567      __________________________________________________________________
   23568 
   23569 
   23570     For questions related to the use of GCC, please consult these web
   23571     pages and the [8]GCC manuals. If that fails, the
   23572     [9]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   23573     web pages and the development of GCC are welcome on our developer
   23574     list at [10]gcc (a] gcc.gnu.org. All of [11]our lists have public
   23575     archives.
   23576 
   23577    Copyright (C) [12]Free Software Foundation, Inc. Verbatim copying and
   23578    distribution of this entire article is permitted in any medium,
   23579    provided this notice is preserved.
   23580 
   23581    These pages are [13]maintained by the GCC team. Last modified
   23582    2024-07-04.
   23583 
   23584 References
   23585 
   23586    1. https://www.gnu.org/
   23587    2. https://gcc.gnu.org/gcc-3.1/buildstat.html
   23588    3. https://gcc.gnu.org/gcc-3.1/changes.html
   23589    4. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   23590    5. https://gcc.gnu.org/index.html
   23591    6. mailto:gcc (a] gcc.gnu.org
   23592    7. https://gcc.gnu.org/mirrors.html
   23593    8. https://gcc.gnu.org/onlinedocs/
   23594    9. mailto:gcc-help (a] gcc.gnu.org
   23595   10. mailto:gcc (a] gcc.gnu.org
   23596   11. https://gcc.gnu.org/lists.html
   23597   12. https://www.fsf.org/
   23598   13. https://gcc.gnu.org/about.html
   23599 ======================================================================
   23600 http://gcc.gnu.org/gcc-3.1/changes.html
   23601 
   23602                              GCC 3.1 Release Series
   23603                         Changes, New Features, and Fixes
   23604 
   23605 Additional changes in GCC 3.1.1
   23606 
   23607      * A bug related to how structures and unions are returned has been
   23608        fixed for powerpc-*-netbsd*.
   23609      * An important bug in the implementation of -fprefetch-loop-arrays
   23610        has been fixed. Previously the optimization prefetched random
   23611        blocks of memory for most targets except for i386.
   23612      * The Java compiler now compiles Java programs much faster and also
   23613        works with parallel make.
   23614      * Nested functions have been fixed for mips*-*-netbsd*.
   23615      * Some missing floating point support routines have beed added for
   23616        mips*-*-netbsd*.
   23617      * This [1]message gives additional information about the bugs fixed
   23618        in this release.
   23619 
   23620 Caveats
   23621 
   23622      * The -traditional C compiler option has been deprecated and will be
   23623        removed in GCC 3.3. (It remains possible to preprocess non-C code
   23624        with the traditional preprocessor.)
   23625      * The default debugging format for most ELF platforms (including
   23626        GNU/Linux and FreeBSD; notable exception is Solaris) has changed
   23627        from stabs to DWARF2. This requires GDB 5.1.1 or later.
   23628 
   23629 General Optimizer Improvements
   23630 
   23631      * Jan Hubicka, SuSE Labs, together with Richard Henderson, Red Hat,
   23632        and Andreas Jaeger, SuSE Labs, has contributed [2]infrastructure
   23633        for profile driven optimizations.
   23634        Options -fprofile-arcs and -fbranch-probabilities can now be used
   23635        to improve speed of the generated code by profiling the actual
   23636        program behaviour on typical runs. In the absence of profile info
   23637        the compiler attempts to guess the profile statically.
   23638      * [3]SPEC2000 and SPEC95 benchmark suites are now used daily to
   23639        monitor performance of the generated code.
   23640        According to the SPECInt2000 results on an AMD Athlon CPU, the code
   23641        generated by GCC 3.1 is 6% faster on the average (8.2% faster with
   23642        profile feedback) compared to GCC 3.0. The code produced by GCC 3.0
   23643        is about 2.1% faster compared to 2.95.3. Tests were done using the
   23644        -O2 -march=athlon command-line options.
   23645      * Alexandre Oliva, of Red Hat, has generalized the tree inlining
   23646        infrastructure developed by CodeSourcery, LLC for the C++ front
   23647        end, so that it is now used in the C front end too. Inlining
   23648        functions as trees exposes them earlier to the compiler, giving it
   23649        more opportunities for optimization.
   23650      * Support for data prefetching instructions has been added to the GCC
   23651        back end and several targets. A new __builtin_prefetch intrinsic is
   23652        available to explicitly insert prefetch instructions and
   23653        experimental support for loop array prefetching has been added (see
   23654        -fprefetch-loop-array documentation).
   23655      * Support for emitting debugging information for macros has been
   23656        added for DWARF2. It is activated using -g3.
   23657 
   23658 New Languages and Language specific improvements
   23659 
   23660   C/C++
   23661 
   23662      * A few more [4]ISO C99 features.
   23663      * The preprocessor is 10-50% faster than the preprocessor in GCC 3.0.
   23664      * The preprocessor's symbol table has been merged with the symbol
   23665        table of the C, C++ and Objective-C front ends.
   23666      * The preprocessor consumes less memory than the preprocessor in GCC
   23667        3.0, often significantly so. On normal input files, it typically
   23668        consumes less memory than pre-3.0 cccp-based GCC, too.
   23669 
   23670   C++
   23671 
   23672      * -fhonor-std and -fno-honor-std have been removed. -fno-honor-std
   23673        was a workaround to allow std compliant code to work with the
   23674        non-std compliant libstdc++-v2. libstdc++-v3 is std compliant.
   23675      * The C++ ABI has been fixed so that void (A::*)() const is mangled
   23676        as "M1AKFvvE", rather than "MK1AFvvE" as before. This change only
   23677        affects pointer to cv-qualified member function types.
   23678      * The C++ ABI has been changed to correctly handle this code:
   23679     struct A {
   23680       void operator delete[] (void *, size_t);
   23681     };
   23682 
   23683     struct B : public A {
   23684     };
   23685 
   23686     new B[10];
   23687 
   23688        The amount of storage allocated for the array will be greater than
   23689        it was in 3.0, in order to store the number of elements in the
   23690        array, so that the correct size can be passed to operator delete[]
   23691        when the array is deleted. Previously, the value passed to operator
   23692        delete[] was unpredictable.
   23693        This change will only affect code that declares a two-argument
   23694        operator delete[] with a second parameter of type size_t in a base
   23695        class, and does not override that definition in a derived class.
   23696      * The C++ ABI has been changed so that:
   23697     struct A {
   23698       void operator delete[] (void *, size_t);
   23699       void operator delete[] (void *);
   23700     };
   23701 
   23702        does not cause unnecessary storage to be allocated when an array of
   23703        A objects is allocated.
   23704        This change will only affect code that declares both of these forms
   23705        of operator delete[], and declared the two-argument form before the
   23706        one-argument form.
   23707      * The C++ ABI has been changed so that when a parameter is passed by
   23708        value, any cleanup for that parameter is performed in the caller,
   23709        as specified by the ia64 C++ ABI, rather than the called function
   23710        as before. As a result, classes with a non-trivial destructor but a
   23711        trivial copy constructor will be passed and returned by invisible
   23712        reference, rather than by bitwise copy as before.
   23713      * G++ now supports the "named return value optimization": for code
   23714        like
   23715     A f () {
   23716       A a;
   23717       ...
   23718       return a;
   23719     }
   23720 
   23721        G++ will allocate a in the return value slot, so that the return
   23722        becomes a no-op. For this to work, all return statements in the
   23723        function must return the same variable.
   23724      * Improvements to the C++ library are listed in [5]the libstdc++-v3
   23725        FAQ.
   23726 
   23727   Objective-C
   23728 
   23729      * Annoying linker warnings (due to incorrect code being generated)
   23730        have been fixed.
   23731      * If a class method cannot be found, the compiler no longer issues a
   23732        warning if a corresponding instance method exists in the root
   23733        class.
   23734      * Forward @protocol declarations have been fixed.
   23735      * Loading of categories has been fixed in certain situations (GNU run
   23736        time only).
   23737      * The class lookup in the run-time library has been rewritten so that
   23738        class method dispatch is more than twice as fast as it used to be
   23739        (GNU run time only).
   23740 
   23741   Java
   23742 
   23743      * libgcj now includes RMI, java.lang.ref.*, javax.naming, and
   23744        javax.transaction.
   23745      * Property files and other system resources can be compiled into
   23746        executables which use libgcj using the new gcj --resource feature.
   23747      * libgcj has been ported to more platforms. In particular there is
   23748        now a mostly-functional mingw32 (Windows) target port.
   23749      * JNI and CNI invocation interfaces were implemented, so gcj-compiled
   23750        Java code can now be called from a C/C++ application.
   23751      * gcj can now use builtin functions for certain known methods, for
   23752        instance Math.cos.
   23753      * gcj can now automatically remove redundant array-store checks in
   23754        some common cases.
   23755      * The --no-store-checks optimization option was added. This can be
   23756        used to omit runtime store checks for code which is known not to
   23757        throw ArrayStoreException
   23758      * The following third party interface standards were added to libgcj:
   23759        org.w3c.dom and org.xml.sax.
   23760      * java.security has been merged with GNU Classpath. The new package
   23761        is now JDK 1.2 compliant, and much more complete.
   23762      * A bytecode verifier was added to the libgcj interpreter.
   23763      * java.lang.Character was rewritten to comply with the Unicode 3.0
   23764        standard, and improve performance.
   23765      * Partial support for many more locales was added to libgcj.
   23766      * Socket timeouts have been implemented.
   23767      * libgcj has been merged into a single shared library. There are no
   23768        longer separate shared libraries for the garbage collector and
   23769        zlib.
   23770      * Several performance improvements were made to gcj and libgcj:
   23771           + Hash synchronization (thin locks)
   23772           + A special allocation path for finalizer-free objects
   23773           + Thread-local allocation
   23774           + Parallel GC, and other GC tweaks
   23775 
   23776   Fortran
   23777 
   23778    Fortran improvements are listed in [6]the Fortran documentation.
   23779 
   23780   Ada
   23781 
   23782    [7]AdaCore, has contributed its GNAT Ada 95 front end and associated
   23783    tools. The GNAT compiler fully implements the Ada language as defined
   23784    by the ISO/IEC 8652 standard.
   23785 
   23786    Please note that the integration of the Ada front end is still work in
   23787    progress.
   23788 
   23789 New Targets and Target Specific Improvements
   23790 
   23791      * Hans-Peter Nilsson has contributed a port to MMIX, the CPU
   23792        architecture used in new editions of Donald E. Knuth's The Art of
   23793        Computer Programming.
   23794      * Axis Communications has contributed its port to the CRIS CPU
   23795        architecture, used in the ETRAX system-on-a-chip series.
   23796      * Alexandre Oliva, of Red Hat, has contributed a port to the SuperH
   23797        SH5 64-bit RISC microprocessor architecture, extending the existing
   23798        SH port.
   23799      * UltraSPARC is fully supported in 64-bit mode. The option -m64
   23800        enables it.
   23801      * For compatibility with the Sun compiler #pragma redefine_extname
   23802        has been implemented on Solaris.
   23803      * The x86 back end has had some noticeable work done to it.
   23804           + SuSE Labs developers Jan Hubicka, Bo Thorsen and Andreas
   23805             Jaeger have contributed a port to the AMD x86-64 architecture.
   23806             For more information on x86-64 see http://www.x86-64.org.
   23807           + The compiler now supports MMX, 3DNow!, SSE, and SSE2
   23808             instructions. Options -mmmx, -m3dnow, -msse, and -msse2 will
   23809             enable the respective instruction sets. Intel C++ compatible
   23810             MMX/3DNow!/SSE intrinsics are implemented. SSE2 intrinsics
   23811             will be added in next major release.
   23812           + Following those improvements, targets for Pentium MMX, K6-2,
   23813             K6-3, Pentium III, Pentium 4, and Athlon 4 Mobile/XP/MP were
   23814             added. Refer to the documentation on -march= and -mcpu=
   23815             options for details.
   23816           + For those targets that support it, -mfpmath=sse will cause the
   23817             compiler to generate SSE/SSE2 instructions for floating point
   23818             math instead of x87 instructions. Usually, this will lead to
   23819             quicker code -- especially on the Pentium 4. Note that only
   23820             scalar floating point instructions are used and GCC does not
   23821             exploit SIMD features yet.
   23822           + Prefetch support has been added to the Pentium III, Pentium 4,
   23823             K6-2, K6-3, and Athlon series.
   23824           + Code generated for floating point to integer conversions has
   23825             been improved leading to better performance of many 3D
   23826             applications.
   23827      * The PowerPC back end has added 64-bit PowerPC GNU/Linux support.
   23828      * C++ support for AIX has been improved.
   23829      * Aldy Hernandez, of Red Hat, Inc, has contributed extensions to the
   23830        PowerPC port supporting the AltiVec programming model (SIMD). The
   23831        support, though presently useful, is experimental and is expected
   23832        to stabilize for 3.2. The support is written to conform to
   23833        Motorola's AltiVec specs. See -maltivec.
   23834 
   23835 [8]Obsolete Systems
   23836 
   23837    Support for a number of older systems has been declared obsolete in GCC
   23838    3.1. Unless there is activity to revive them, the next release of GCC
   23839    will have their sources permanently removed.
   23840 
   23841    All configurations of the following processor architectures have been
   23842    declared obsolete:
   23843      * MIL-STD-1750A, 1750a-*-*
   23844      * AMD A29k, a29k-*-*
   23845      * Convex, c*-convex-*
   23846      * Clipper, clipper-*-*
   23847      * Elxsi, elxsi-*-*
   23848      * Intel i860, i860-*-*
   23849      * Sun picoJava, pj-*-* and pjl-*-*
   23850      * Western Electric 32000, we32k-*-*
   23851 
   23852    Most configurations of the following processor architectures have been
   23853    declared obsolete, but we are preserving a few systems which may have
   23854    active developers. It is unlikely that the remaining systems will
   23855    survive much longer unless we see definite signs of port activity.
   23856      * Motorola 88000 except
   23857           + Generic a.out, m88k-*-aout*
   23858           + Generic SVR4, m88k-*-sysv4
   23859           + OpenBSD, m88k-*-openbsd*
   23860      * NS32k except
   23861           + NetBSD, ns32k-*-netbsd*
   23862           + OpenBSD, ns32k-*-openbsd*.
   23863      * ROMP except
   23864           + OpenBSD, romp-*-openbsd*.
   23865 
   23866    Finally, only some configurations of these processor architectures are
   23867    being obsoleted.
   23868      * Alpha:
   23869           + OSF/1, alpha*-*-osf[123]*. (Digital Unix and Tru64 Unix, aka
   23870             alpha*-*-osf[45], are still supported.)
   23871      * ARM:
   23872           + RISCiX, arm-*-riscix*.
   23873      * i386:
   23874           + 386BSD, i?86-*-bsd*
   23875           + Chorus, i?86-*-chorusos*
   23876           + DG/UX, i?86-*-dgux*
   23877           + FreeBSD 1.x, i?86-*-freebsd1.*
   23878           + IBM AIX, i?86-*-aix*
   23879           + ISC UNIX, i?86-*-isc*
   23880           + GNU/Linux with pre-BFD linker, i?86-*-linux*oldld*
   23881           + NEXTstep, i?86-next-*
   23882           + OSF UNIX, i?86-*-osf1* and i?86-*-osfrose*
   23883           + RTEMS/coff, i?86-*-rtemscoff*
   23884           + RTEMS/go32, i?86-go32-rtems*
   23885           + Sequent/BSD, i?86-sequent-bsd*
   23886           + Sequent/ptx before version 3, i?86-sequent-ptx[12]* and
   23887             i?86-sequent-sysv3*
   23888           + SunOS, i?86-*-sunos*
   23889      * Motorola 68000:
   23890           + Altos, m68[k0]*-altos-*
   23891           + Apollo, m68[k0]*-apollo-*
   23892           + Apple A/UX, m68[k0]*-apple-*
   23893           + Bull, m68[k0]*-bull-*
   23894           + Convergent, m68[k0]*-convergent-*
   23895           + Generic SVR3, m68[k0]*-*-sysv3*
   23896           + ISI, m68[k0]*-isi-*
   23897           + LynxOS, m68[k0]*-*-lynxos*
   23898           + NEXT, m68[k0]*-next-*
   23899           + RTEMS/coff, m68[k0]*-*-rtemscoff*
   23900           + Sony, m68[k0]*-sony-*
   23901      * MIPS:
   23902           + DEC Ultrix, mips-*-ultrix* and mips-dec-*
   23903           + Generic BSD, mips-*-bsd*
   23904           + Generic System V, mips-*-sysv*
   23905           + IRIX before version 5, mips-sgi-irix[1234]*
   23906           + RiscOS, mips-*-riscos*
   23907           + Sony, mips-sony-*
   23908           + Tandem, mips-tandem-*
   23909      * SPARC:
   23910           + RTEMS/a.out, sparc-*-rtemsaout*.
   23911 
   23912 Documentation improvements
   23913 
   23914      * The old manual ("Using and Porting the GNU Compiler Collection")
   23915        has been replaced by a users manual ("Using the GNU Compiler
   23916        Collection") and a separate internals reference manual ("GNU
   23917        Compiler Collection Internals").
   23918      * More complete and much improved documentation about GCC's internal
   23919        representation used by the C and C++ front ends.
   23920      * Many cleanups and improvements in general.
   23921 
   23922 
   23923     For questions related to the use of GCC, please consult these web
   23924     pages and the [9]GCC manuals. If that fails, the
   23925     [10]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   23926     web pages and the development of GCC are welcome on our developer
   23927     list at [11]gcc (a] gcc.gnu.org. All of [12]our lists have public
   23928     archives.
   23929 
   23930    Copyright (C) [13]Free Software Foundation, Inc. Verbatim copying and
   23931    distribution of this entire article is permitted in any medium,
   23932    provided this notice is preserved.
   23933 
   23934    These pages are [14]maintained by the GCC team. Last modified
   23935    2025-01-31.
   23936 
   23937 References
   23938 
   23939    1. https://gcc.gnu.org/ml/gcc/2002-07/msg01208.html
   23940    2. https://gcc.gnu.org/news/profiledriven.html
   23941    3. https://gcc.gnu.org/benchmarks/
   23942    4. https://gcc.gnu.org/c99status.html
   23943    5. https://gcc.gnu.org/onlinedocs/libstdc++/faq.html
   23944    6. https://gcc.gnu.org/onlinedocs/gcc-3.1.1/g77/News.html
   23945    7. https://www.adacore.com/
   23946    8. https://gcc.gnu.org/gcc-3.1/changes.html#obsolete_systems
   23947    9. https://gcc.gnu.org/onlinedocs/
   23948   10. mailto:gcc-help (a] gcc.gnu.org
   23949   11. mailto:gcc (a] gcc.gnu.org
   23950   12. https://gcc.gnu.org/lists.html
   23951   13. https://www.fsf.org/
   23952   14. https://gcc.gnu.org/about.html
   23953 ======================================================================
   23954 http://gcc.gnu.org/gcc-3.0/index.html
   23955 
   23956                                    GCC 3.0.4
   23957 
   23958    (This release series is no longer supported.)
   23959 
   23960    February 20, 2002
   23961 
   23962    The [1]GNU project and the GCC developers are pleased to announce the
   23963    release of GCC 3.0.4, which is a bug-fix release for the GCC 3.0
   23964    series.
   23965 
   23966    GCC used to stand for the GNU C Compiler, but since the compiler
   23967    supports several other languages aside from C, it now stands for the
   23968    GNU Compiler Collection.
   23969 
   23970    GCC 3.0.x has several new optimizations, new targets, new languages and
   23971    many other new features, relative to GCC 2.95.x. See the [2]new
   23972    features page for a more complete list.
   23973 
   23974    A list of [3]successful builds is updated as new information becomes
   23975    available.
   23976 
   23977    The GCC developers would like to thank the numerous people that have
   23978    contributed new features, test results, bug fixes, etc to GCC. This
   23979    [4]amazing group of volunteers is what makes GCC successful.
   23980 
   23981    And finally, we can't in good conscience fail to mention some
   23982    [5]caveats to using GCC 3.0.x.
   23983 
   23984    For additional information about GCC please refer to the [6]GCC project
   23985    web site or contact the [7]GCC development mailing list.
   23986 
   23987    To obtain GCC please use [8]our mirror sites, or our CVS server.
   23988      __________________________________________________________________
   23989 
   23990 Previous 3.0.x Releases
   23991 
   23992    December 20, 2001: GCC 3.0.3 has been released.
   23993    October 25, 2001: GCC 3.0.2 has been released.
   23994    August 20, 2001: GCC 3.0.1 has been released.
   23995    June 18, 2001: GCC 3.0 has been released.
   23996 
   23997 
   23998     For questions related to the use of GCC, please consult these web
   23999     pages and the [9]GCC manuals. If that fails, the
   24000     [10]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   24001     web pages and the development of GCC are welcome on our developer
   24002     list at [11]gcc (a] gcc.gnu.org. All of [12]our lists have public
   24003     archives.
   24004 
   24005    Copyright (C) [13]Free Software Foundation, Inc. Verbatim copying and
   24006    distribution of this entire article is permitted in any medium,
   24007    provided this notice is preserved.
   24008 
   24009    These pages are [14]maintained by the GCC team. Last modified
   24010    2024-07-04.
   24011 
   24012 References
   24013 
   24014    1. https://www.gnu.org/
   24015    2. https://gcc.gnu.org/gcc-3.0/features.html
   24016    3. https://gcc.gnu.org/gcc-3.0/buildstat.html
   24017    4. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   24018    5. https://gcc.gnu.org/gcc-3.0/caveats.html
   24019    6. https://gcc.gnu.org/index.html
   24020    7. mailto:gcc (a] gcc.gnu.org
   24021    8. https://gcc.gnu.org/mirrors.html
   24022    9. https://gcc.gnu.org/onlinedocs/
   24023   10. mailto:gcc-help (a] gcc.gnu.org
   24024   11. mailto:gcc (a] gcc.gnu.org
   24025   12. https://gcc.gnu.org/lists.html
   24026   13. https://www.fsf.org/
   24027   14. https://gcc.gnu.org/about.html
   24028 ======================================================================
   24029 http://gcc.gnu.org/gcc-3.0/features.html
   24030 
   24031                               GCC 3.0 New Features
   24032 
   24033 Additional changes in GCC 3.0.4
   24034 
   24035      * GCC 3.0 now supports newer versions of the [1]NetBSD operating
   24036        system, which use the ELF object file format, on x86 processors.
   24037      * Correct debugging information is generated from functions that have
   24038        lines from multiple files (e.g. yacc output).
   24039      * A fix for whitespace handling in the -traditional preprocessor,
   24040        which can affect Fortran.
   24041      * Fixes to the exception handling runtime.
   24042      * More fixes for bad code generation in C++.
   24043      * A fix for shared library generation under AIX 4.3.
   24044      * Documentation updates.
   24045      * Port of GCC to Tensilica's Xtensa processor contributed.
   24046      * A fix for compiling the PPC Linux kernel (FAT fs wouldn't link).
   24047 
   24048 Additional changes in GCC 3.0.3
   24049 
   24050      * A fix to correct an accidental change to the PowerPC ABI.
   24051      * Fixes for bad code generation on a variety of architectures.
   24052      * Improvements to the debugging information generated for C++
   24053        classes.
   24054      * Fixes for bad code generation in C++.
   24055      * A fix to avoid crashes in the C++ demangler.
   24056      * A fix to the C++ standard library to avoid buffer overflows.
   24057      * Miscellaneous improvements for a variety of architectures.
   24058 
   24059 Additional changes in GCC 3.0.2
   24060 
   24061      * Fixes for bad code generation during loop unrolling.
   24062      * Fixes for bad code generation by the sibling call optimization.
   24063      * Minor improvements to x86 code generation.
   24064      * Implementation of function descriptors in C++ vtables for IA64.
   24065      * Numerous minor bug-fixes.
   24066 
   24067 Additional changes in GCC 3.0.1
   24068 
   24069      * C++ fixes for incorrect code-generation.
   24070      * Improved cross-compiling support for the C++ standard library.
   24071      * Fixes for some embedded targets that worked in GCC 2.95.3, but not
   24072        in GCC 3.0.
   24073      * Fixes for various exception-handling bugs.
   24074      * A port to the S/390 architecture.
   24075 
   24076 General Optimizer Improvements
   24077 
   24078      * [2]Basic block reordering pass.
   24079      * New if-conversion pass with support for conditional (predicated)
   24080        execution.
   24081      * New tail call and sibling call elimination optimizations.
   24082      * New register renaming pass.
   24083      * New (experimental) [3]static single assignment (SSA) representation
   24084        support.
   24085      * New dead-code elimination pass implemented using the SSA
   24086        representation.
   24087      * [4]Global null pointer test elimination.
   24088      * [5]Global code hoisting/unification.
   24089      * More builtins and optimizations for stdio.h, string.h and old BSD
   24090        functions, as well as for ISO C99 functions.
   24091      * New builtin __builtin_expect for giving hints to the branch
   24092        predictor.
   24093 
   24094 New Languages and Language specific improvements
   24095 
   24096      * The GNU Compiler for the Java(TM) language (GCJ) is now integrated
   24097        and supported, including the run-time library containing most
   24098        common non-GUI Java classes, a bytecode interpreter, and the Boehm
   24099        conservative garbage collector. Many bugs have been fixed. GCJ can
   24100        compile Java source or Java bytecodes to either native code or Java
   24101        class files, and supports native methods written in either the
   24102        standard JNI or the more efficient and convenient CNI.
   24103      * Here is a [6]partial list of C++ improvements, both new features
   24104        and those no longer supported.
   24105      * New C++ ABI. On the IA-64 platform GCC is capable of
   24106        inter-operating with other IA-64 compilers.
   24107      * The new ABI also significantly reduces the size of symbol and debug
   24108        information.
   24109      * New C++ support library and many C++ bug fixes, vastly improving
   24110        our conformance to the ISO C++ standard.
   24111      * New [7]inliner for C++.
   24112      * Rewritten C preprocessor, integrated into the C, C++ and Objective
   24113        C compilers, with very many improvements including ISO C99 support
   24114        and [8]improvements to dependency generation.
   24115      * Support for more [9]ISO C99 features.
   24116      * Many improvements to support for checking calls to format functions
   24117        such as printf and scanf, including support for ISO C99 format
   24118        features, extensions from the Single Unix Specification and GNU
   24119        libc 2.2, checking of strfmon formats and features to assist in
   24120        auditing for format string security bugs.
   24121      * New warnings for C code that may have undefined semantics because
   24122        of violations of sequence point rules in the C standard (such as a
   24123        = a++;, a[n] = b[n++]; and a[i++] = i;), included in -Wall.
   24124      * Additional warning option -Wfloat-equal.
   24125      * Improvements to -Wtraditional.
   24126      * Fortran improvements are listed in [10]the Fortran documentation.
   24127 
   24128 New Targets and Target Specific Improvements
   24129 
   24130      * New x86 back end, generating much improved code.
   24131      * Support for a generic i386-elf target contributed.
   24132      * New option to emit x86 assembly code using Intel style syntax
   24133        (-mintel-syntax).
   24134      * HPUX 11 support contributed.
   24135      * Improved PowerPC code generation, including scheduled prologue and
   24136        epilogue.
   24137      * Port of GCC to Intel's IA-64 processor contributed.
   24138      * Port of GCC to Motorola's MCore 210 and 340 contributed.
   24139      * New unified back-end for Arm, Thumb and StrongArm contributed.
   24140      * Port of GCC to Intel's XScale processor contributed.
   24141      * Port of GCC to Atmel's AVR microcontrollers contributed.
   24142      * Port of GCC to Mitsubishi's D30V processor contributed.
   24143      * Port of GCC to Matsushita's AM33 processor (a member of the MN10300
   24144        processor family) contributed.
   24145      * Port of GCC to Fujitsu's FR30 processor contributed.
   24146      * Port of GCC to Motorola's 68HC11 and 68HC12 processors contributed.
   24147      * Port of GCC to Sun's picoJava processor core contributed.
   24148 
   24149 Documentation improvements
   24150 
   24151      * Substantially rewritten and improved C preprocessor manual.
   24152      * Many improvements to other documentation.
   24153      * Manpages for gcc, cpp and gcov are now generated automatically from
   24154        the master Texinfo manual, eliminating the problem of manpages
   24155        being out of date. (The generated manpages are only extracts from
   24156        the full manual, which is provided in Texinfo form, from which
   24157        info, HTML, other formats and a printed manual can be generated.)
   24158      * Generated info files are included in the release tarballs alongside
   24159        their Texinfo sources, avoiding problems on some platforms with
   24160        building makeinfo as part of the GCC distribution.
   24161 
   24162 Other significant improvements
   24163 
   24164      * Garbage collection used internally by the compiler for most memory
   24165        allocation instead of obstacks.
   24166      * Lengauer and Tarjan algorithm used for computing dominators in the
   24167        CFG. This algorithm can be significantly faster and more space
   24168        efficient than our older algorithm.
   24169      * gccbug script provided to assist in submitting bug reports to our
   24170        bug tracking system. (Bug reports previously submitted directly to
   24171        our mailing lists, for which you received no bug tracking number,
   24172        should be submitted again using gccbug if you can reproduce the
   24173        problem with GCC 3.0.)
   24174      * The internal libgcc library is [11]built as a shared library on
   24175        systems that support it.
   24176      * Extensive testsuite included with GCC, with many new tests. In
   24177        addition to tests for GCC bugs that have been fixed, many tests
   24178        have been added for language features, compiler warnings and
   24179        builtin functions.
   24180      * Additional language-independent warning options -Wpacked, -Wpadded,
   24181        -Wunreachable-code and -Wdisabled-optimization.
   24182      * Target-independent options -falign-functions, -falign-loops and
   24183        -falign-jumps.
   24184 
   24185    Plus a great many bug fixes and almost all the [12]features found in
   24186    GCC 2.95.
   24187 
   24188 
   24189     For questions related to the use of GCC, please consult these web
   24190     pages and the [13]GCC manuals. If that fails, the
   24191     [14]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   24192     web pages and the development of GCC are welcome on our developer
   24193     list at [15]gcc (a] gcc.gnu.org. All of [16]our lists have public
   24194     archives.
   24195 
   24196    Copyright (C) [17]Free Software Foundation, Inc. Verbatim copying and
   24197    distribution of this entire article is permitted in any medium,
   24198    provided this notice is preserved.
   24199 
   24200    These pages are [18]maintained by the GCC team. Last modified
   24201    2022-10-26.
   24202 
   24203 References
   24204 
   24205    1. http://www.netbsd.org/
   24206    2. https://gcc.gnu.org/news/reorder.html
   24207    3. https://gcc.gnu.org/news/ssa.html
   24208    4. https://gcc.gnu.org/news/null.html
   24209    5. https://gcc.gnu.org/news/unify.html
   24210    6. https://gcc.gnu.org/gcc-3.0/c++features.html
   24211    7. https://gcc.gnu.org/news/inlining.html
   24212    8. https://gcc.gnu.org/news/dependencies.html
   24213    9. https://gcc.gnu.org/c99status.html
   24214   10. https://gcc.gnu.org/onlinedocs/gcc-3.4.6/g77/News.html
   24215   11. https://gcc.gnu.org/gcc-3.0/libgcc.html
   24216   12. https://gcc.gnu.org/gcc-2.95/features.html
   24217   13. https://gcc.gnu.org/onlinedocs/
   24218   14. mailto:gcc-help (a] gcc.gnu.org
   24219   15. mailto:gcc (a] gcc.gnu.org
   24220   16. https://gcc.gnu.org/lists.html
   24221   17. https://www.fsf.org/
   24222   18. https://gcc.gnu.org/about.html
   24223 ======================================================================
   24224 http://gcc.gnu.org/gcc-3.0/caveats.html
   24225 
   24226                                 GCC 3.0 Caveats
   24227 
   24228      * -fstrict-aliasing is now part of -O2 and higher optimization
   24229        levels. This allows the compiler to assume the strictest aliasing
   24230        rules applicable to the language being compiled. For C and C++,
   24231        this activates optimizations based on the type of expressions. This
   24232        optimization may thus break old, non-compliant code.
   24233      * Enumerations are now properly promoted to int in function
   24234        parameters and function returns. Normally this change is not
   24235        visible, but when using -fshort-enums this is an ABI change.
   24236      * The undocumented extension that allowed C programs to have a label
   24237        at the end of a compound statement has been deprecated and may be
   24238        removed in a future version. Programs that now generate a warning
   24239        about this may be fixed by adding a null statement (a single
   24240        semicolon) after the label.
   24241      * The poorly documented extension that allowed string constants in C,
   24242        C++ and Objective C to contain unescaped newlines has been
   24243        deprecated and may be removed in a future version. Programs using
   24244        this extension may be fixed in several ways: the bare newline may
   24245        be replaced by \n, or preceded by \n\, or string concatenation may
   24246        be used with the bare newline preceded by \n" and " placed at the
   24247        start of the next line.
   24248      * The Chill compiler is not included in GCC 3.0, because of the lack
   24249        of a volunteer to convert it to use garbage collection.
   24250      * Certain non-standard iostream methods from earlier versions of
   24251        libstdc++ are not included in libstdc++ v3, i.e. filebuf::attach,
   24252        ostream::form, and istream::gets.
   24253      * The new C++ ABI is not yet fully supported by current (as of
   24254        2001-07-01) releases and development versions of GDB, or any
   24255        earlier versions. There is a problem setting breakpoints by line
   24256        number, and other related issues that have been fixed in GCC 3.0
   24257        but not yet handled in GDB:
   24258        [1]https://gcc.gnu.org/ml/gcc-bugs/2001-06/msg00421.html
   24259 
   24260 
   24261     For questions related to the use of GCC, please consult these web
   24262     pages and the [2]GCC manuals. If that fails, the
   24263     [3]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   24264     web pages and the development of GCC are welcome on our developer
   24265     list at [4]gcc (a] gcc.gnu.org. All of [5]our lists have public archives.
   24266 
   24267    Copyright (C) [6]Free Software Foundation, Inc. Verbatim copying and
   24268    distribution of this entire article is permitted in any medium,
   24269    provided this notice is preserved.
   24270 
   24271    These pages are [7]maintained by the GCC team. Last modified
   24272    2022-10-26.
   24273 
   24274 References
   24275 
   24276    1. https://gcc.gnu.org/ml/gcc-bugs/2001-06/msg00421.html
   24277    2. https://gcc.gnu.org/onlinedocs/
   24278    3. mailto:gcc-help (a] gcc.gnu.org
   24279    4. mailto:gcc (a] gcc.gnu.org
   24280    5. https://gcc.gnu.org/lists.html
   24281    6. https://www.fsf.org/
   24282    7. https://gcc.gnu.org/about.html
   24283 ======================================================================
   24284 http://gcc.gnu.org/gcc-2.95/index.html
   24285 
   24286                                     GCC 2.95
   24287 
   24288    (This release series is no longer supported.)
   24289 
   24290    March 16, 2001: The GNU project and the GCC developers are pleased to
   24291    announce the release of GCC version 2.95.3.
   24292 
   24293 Release History
   24294 
   24295    GCC 2.95.3
   24296           March 16, 2001
   24297 
   24298    GCC 2.95.2
   24299           October 27, 1999
   24300 
   24301    GCC 2.95.1
   24302           August 19, 1999
   24303 
   24304    GCC 2.95
   24305           July 31, 1999. This is the first release of GCC since the April
   24306           1999 GCC/EGCS reunification and includes nearly a year's worth
   24307           of new development and bugfixes.
   24308 
   24309 References and Acknowledgements
   24310 
   24311    GCC used to stand for the GNU C Compiler, but since the compiler
   24312    supports several other languages aside from C, it now stands for the
   24313    GNU Compiler Collection.
   24314 
   24315    The whole suite has been extensively [1]regression tested and
   24316    [2]package tested. It should be reliable and suitable for widespread
   24317    use.
   24318 
   24319    The compiler has several new optimizations, new targets, new languages
   24320    and other new features. See the [3]new features page for a more
   24321    complete list of new features found in the GCC 2.95 releases.
   24322 
   24323    The sources include installation instructions in both HTML and
   24324    plaintext forms in the install directory in the distribution. However,
   24325    the most up to date installation instructions and [4]build/test status
   24326    are on the web pages. We will update those pages as new information
   24327    becomes available.
   24328 
   24329    The GCC developers would like to thank the numerous people that have
   24330    contributed new features, test results, bugfixes, etc to GCC. This
   24331    [5]amazing group of volunteers is what makes GCC successful.
   24332 
   24333    And finally, we can't in good conscience fail to mention some
   24334    [6]caveats to using GCC 2.95.
   24335 
   24336    Download GCC 2.95 from one of our many [7]mirror sites.
   24337 
   24338    For additional information about GCC please see the [8]GCC project web
   24339    server or contact the [9]GCC development mailing list.
   24340 
   24341 
   24342     For questions related to the use of GCC, please consult these web
   24343     pages and the [10]GCC manuals. If that fails, the
   24344     [11]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   24345     web pages and the development of GCC are welcome on our developer
   24346     list at [12]gcc (a] gcc.gnu.org. All of [13]our lists have public
   24347     archives.
   24348 
   24349    Copyright (C) [14]Free Software Foundation, Inc. Verbatim copying and
   24350    distribution of this entire article is permitted in any medium,
   24351    provided this notice is preserved.
   24352 
   24353    These pages are [15]maintained by the GCC team. Last modified
   24354    2022-10-26.
   24355 
   24356 References
   24357 
   24358    1. https://gcc.gnu.org/gcc-2.95/regress.html
   24359    2. https://gcc.gnu.org/gcc-2.95/othertest.html
   24360    3. https://gcc.gnu.org/gcc-2.95/features.html
   24361    4. https://gcc.gnu.org/gcc-2.95/buildstat.html
   24362    5. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   24363    6. https://gcc.gnu.org/gcc-2.95/caveats.html
   24364    7. https://gcc.gnu.org/mirrors.html
   24365    8. https://gcc.gnu.org/index.html
   24366    9. mailto:gcc (a] gcc.gnu.org
   24367   10. https://gcc.gnu.org/onlinedocs/
   24368   11. mailto:gcc-help (a] gcc.gnu.org
   24369   12. mailto:gcc (a] gcc.gnu.org
   24370   13. https://gcc.gnu.org/lists.html
   24371   14. https://www.fsf.org/
   24372   15. https://gcc.gnu.org/about.html
   24373 ======================================================================
   24374 http://gcc.gnu.org/gcc-2.95/features.html
   24375 
   24376                              GCC 2.95 New Features
   24377 
   24378      * General Optimizer Improvements:
   24379           + [1]Localized register spilling to improve speed and code
   24380             density especially on small register class machines.
   24381           + [2]Global CSE using lazy code motion algorithms.
   24382           + [3]Improved global constant/copy propagation.
   24383           + [4]Improved control flow graph analysis and manipulation.
   24384           + [5]Local dead store elimination.
   24385           + [6]Memory Load hoisting/store sinking in loops.
   24386           + [7]Type based alias analysis is enabled by default. Note this
   24387             feature will expose bugs in the Linux kernel. Please refer to
   24388             the FAQ (as shipped with GCC 2.95) for additional information
   24389             on this issue.
   24390           + Major revamp of GIV detection, combination and simplification
   24391             to improve loop performance.
   24392           + Major improvements to register allocation and reloading.
   24393      * New Languages and Language specific improvements
   24394           + [8]Many C++ improvements.
   24395           + [9]Many Fortran improvements.
   24396           + [10]Java front-end has been integrated. A [11]runtime library
   24397             is available separately.
   24398           + [12]ISO C99 support
   24399           + [13]Chill front-end and runtime has been integrated.
   24400           + Boehm garbage collector support in libobjc.
   24401           + More support for various pragmas which appear in vendor
   24402             include files
   24403      * New Targets and Target Specific Improvements
   24404           + [14]SPARC back end rewrite.
   24405           + -mschedule=8000 will optimize code for PA8000 class
   24406             processors; -mpa-risc-2-0 will generate code for PA2.0
   24407             processors
   24408           + Various micro-optimizations for the ia32 port. K6
   24409             optimizations
   24410           + Compiler will attempt to align doubles in the stack on the
   24411             ia32 port
   24412           + Alpha EV6 support
   24413           + PowerPC 750
   24414           + RS6000/PowerPC: -mcpu=401 was added as an alias for -mcpu=403.
   24415             -mcpu=e603e was added to do -mcpu=603e and -msoft-float.
   24416           + c3x, c4x
   24417           + HyperSPARC
   24418           + SparcLite86x
   24419           + sh4
   24420           + Support for new systems (OpenBSD, FreeBSD, UWIN, Interix,
   24421             arm-linux)
   24422           + vxWorks targets include support for vxWorks threads
   24423           + StrongARM 110 and ARM9 support added. ARM Scheduling
   24424             parameters rewritten.
   24425           + Various changes to the MIPS port to avoid assembler macros,
   24426             which in turn improves performance
   24427           + Various performance improvements to the i960 port.
   24428           + Major rewrite of ns32k port
   24429      * Other significant improvements
   24430           + [15]Ability to dump cfg information and display it using vcg.
   24431           + The new faster scheme for fixing vendor header files is
   24432             enabled by default.
   24433           + Experimental internationalization support.
   24434           + multibyte character support
   24435           + Some compile-time speedups for pathological problems
   24436           + Better support for complex types
   24437      * Plus the usual mountain of bugfixes
   24438      * Core compiler is based on the gcc2 development tree from Sept 30,
   24439        1998, so we have all of the [16]features found in GCC 2.8.
   24440 
   24441 Additional Changes in GCC 2.95.1
   24442 
   24443      * Generic bugfixes and improvements
   24444           + Various documentation fixes related to the GCC/EGCS merger.
   24445           + Fix memory management bug which could lead to spurious aborts,
   24446             core dumps or random parsing errors in the compiler.
   24447           + Fix a couple bugs in the dwarf1 and dwarf2 debug record
   24448             support.
   24449           + Fix infinite loop in the CSE optimizer.
   24450           + Avoid undefined behavior in compiler FP emulation code
   24451           + Fix install problem when prefix is overridden on the make
   24452             install command.
   24453           + Fix problem with unwanted installation of assert.h on some
   24454             systems.
   24455           + Fix problem with finding the wrong assembler in a single tree
   24456             build.
   24457           + Avoid increasing the known alignment of a register that is
   24458             already known to be a pointer.
   24459      * Platform specific bugfixes and improvements
   24460           + Codegen bugfix for prologue/epilogue for cpu32 target.
   24461           + Fix long long code generation bug for the Coldfire target.
   24462           + Fix various aborts in the SH compiler.
   24463           + Fix bugs in libgcc support library for the SH.
   24464           + Fix alpha ev6 code generation bug.
   24465           + Fix problems with EXIT_SUCCESS/EXIT_FAILURE redefinitions on
   24466             AIX platforms.
   24467           + Fix -fpic code generation bug for rs6000/ppc svr4 targets.
   24468           + Fix varargs/stdarg code generation bug for rs6000/ppc svr4
   24469             targets.
   24470           + Fix weak symbol handling for rs6000/ppc svr4 targets.
   24471           + Fix various problems with 64bit code generation for the
   24472             rs6000/ppc port.
   24473           + Fix codegen bug which caused tetex to be mis-compiled on the
   24474             x86.
   24475           + Fix compiler abort in new cfg code exposed by x86 port.
   24476           + Fix out of range array reference in code convert flat
   24477             registers to the x87 stacked FP register file.
   24478           + Fix minor vxworks configuration bug.
   24479           + Fix return type of bsearch for SunOS 4.x.
   24480      * Language & Runtime specific fixes.
   24481           + The G++ signature extension has been deprecated. It will be
   24482             removed in the next major release of G++. Use of signatures
   24483             will result in a warning from the compiler.
   24484           + Several bugs relating to templates and namespaces were fixed.
   24485           + A bug that caused crashes when combining templates with -g on
   24486             DWARF1 platforms was fixed.
   24487           + Pointers-to-members, virtual functions, and multiple
   24488             inheritance should now work together correctly.
   24489           + Some code-generation bugs relating to function try blocks were
   24490             fixed.
   24491           + G++ is a little bit more lenient with certain archaic
   24492             constructs than in GCC 2.95.
   24493           + Fix to prevent shared library version #s from bring truncated
   24494             to 1 digit
   24495           + Fix missing std:: in the libstdc++ library.
   24496           + Fix stream locking problems in libio.
   24497           + Fix problem in java compiler driver.
   24498 
   24499 Additional Changes in GCC 2.95.2
   24500 
   24501    The -fstrict-aliasing is not enabled by default for GCC 2.95.2. While
   24502    the optimizations performed by -fstrict-aliasing are valid according to
   24503    the C and C++ standards, the optimization have caused some problems,
   24504    particularly with old non-conforming code.
   24505 
   24506    The GCC developers are experimenting with ways to warn users about code
   24507    which violates the C/C++ standards, but those warnings are not ready
   24508    for widespread use at this time. Rather than wait for those warnings
   24509    the GCC developers have chosen to disable -fstrict-aliasing by default
   24510    for the GCC 2.95.2 release.
   24511 
   24512    We strongly encourage developers to find and fix code which violates
   24513    the C/C++ standards as -fstrict-aliasing may be enabled by default in
   24514    future releases. Use the option -fstrict-aliasing to re-enable these
   24515    optimizations.
   24516      * Generic bugfixes and improvements
   24517           + Fix incorrectly optimized memory reference in global common
   24518             subexpression elimination (GCSE) optimization pass.
   24519           + Fix code generation bug in regmove.c in which it could
   24520             incorrectly change a "const" value.
   24521           + Fix bug in optimization of conditionals involving volatile
   24522             memory references.
   24523           + Avoid over-allocation of stack space for some procedures.
   24524           + Fixed bug in the compiler which caused incorrect optimization
   24525             of an obscure series of bit manipulations, shifts and
   24526             arithmetic.
   24527           + Fixed register allocator bug which caused teTeX to be
   24528             mis-compiled on SPARC targets.
   24529           + Avoid incorrect optimization of degenerate case statements for
   24530             certain targets such as the ARM.
   24531           + Fix out of range memory reference in the jump optimizer.
   24532           + Avoid dereferencing null pointer in fix-header.
   24533           + Fix test for GCC specific features so that it is possible to
   24534             bootstrap with gcc-2.6.2 and older versions of GCC.
   24535           + Fix typo in scheduler which could potentially cause out of
   24536             range memory accesses.
   24537           + Avoid incorrect loop reversal which caused incorrect code for
   24538             certain loops on PowerPC targets.
   24539           + Avoid incorrect optimization of switch statements on certain
   24540             targets (for example the ARM).
   24541      * Platform specific bugfixes and improvements
   24542           + Work around bug in Sun V5.0 compilers which caused bootstrap
   24543             comparison failures on SPARC targets.
   24544           + Fix SPARC back end bug which caused aborts in final.c.
   24545           + Fix sparc-hal-solaris2* configuration fragments.
   24546           + Fix bug in sparc block profiling.
   24547           + Fix obscure code generation bug for the PARISC targets.
   24548           + Define __STDC_EXT__ for HPUX configurations.
   24549           + Various POWERPC64 code generation bugfixes.
   24550           + Fix abort for PPC targets using ELF (ex GNU/Linux).
   24551           + Fix collect2 problems for AIX targets.
   24552           + Correct handling of .file directive for PPC targets.
   24553           + Fix bug in fix_trunc x86 patterns.
   24554           + Fix x86 port to correctly pop the FP stack for functions that
   24555             return structures in memory.
   24556           + Fix minor bug in strlen x86 pattern.
   24557           + Use stabs debugging instead of dwarf1 for x86-solaris targets.
   24558           + Fix template repository code to handle leading underscore in
   24559             mangled names.
   24560           + Fix weak/weak alias support for OpenBSD.
   24561           + GNU/Linux for the ARM has C++ compatible include files.
   24562      * Language & Runtime specific fixes.
   24563           + Fix handling of constructor attribute in the C front-end which
   24564             caused problems building the Chill runtime library on some
   24565             targets.
   24566           + Fix minor problem merging type qualifiers in the C front-end.
   24567           + Fix aliasing bug for pointers and references (C/C++).
   24568           + Fix incorrect "non-constant initializer bug" when -traditional
   24569             or -fwritable-strings is enabled.
   24570           + Fix build error for Chill front-end on SunOS.
   24571           + Do not complain about duplicate instantiations when using
   24572             -frepo (C++).
   24573           + Fix array bounds handling in C++ front-end which caused
   24574             problems with dwarf debugging information in some
   24575             circumstances.
   24576           + Fix minor namespace problem.
   24577           + Fix problem linking java programs.
   24578 
   24579 Additional Changes in GCC 2.95.3
   24580 
   24581      * Generic bugfixes and improvements
   24582           + Fix numerous problems that caused incorrect optimization in
   24583             the register reloading code.
   24584           + Fix numerous problems that caused incorrect optimization in
   24585             the loop optimizer.
   24586           + Fix aborts in the functions build_insn_chain and scan_loops
   24587             under some circumstances.
   24588           + Fix an alias analysis bug.
   24589           + Fix an infinite compilation bug in the combiner.
   24590           + A few problems with complex number support have been fixed.
   24591           + It is no longer possible for gcc to act as a fork bomb when
   24592             installed incorrectly.
   24593           + The -fpack-struct option should be recognized now.
   24594           + Fixed a bug that caused incorrect code to be generated due to
   24595             a lost stack adjustment.
   24596      * Platform specific bugfixes and improvements
   24597           + Support building ARM toolchains hosted on Windows.
   24598           + Fix attribute calculations in ARM toolchains.
   24599           + arm-linux support has been improved.
   24600           + Fix a PIC failure on sparc targets.
   24601           + On ix86 targets, the regparm attribute should now work
   24602             reliably.
   24603           + Several updates for the h8300 port.
   24604           + Fix problem building libio with glibc 2.2.
   24605 
   24606 
   24607     For questions related to the use of GCC, please consult these web
   24608     pages and the [17]GCC manuals. If that fails, the
   24609     [18]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   24610     web pages and the development of GCC are welcome on our developer
   24611     list at [19]gcc (a] gcc.gnu.org. All of [20]our lists have public
   24612     archives.
   24613 
   24614    Copyright (C) [21]Free Software Foundation, Inc. Verbatim copying and
   24615    distribution of this entire article is permitted in any medium,
   24616    provided this notice is preserved.
   24617 
   24618    These pages are [22]maintained by the GCC team. Last modified
   24619    2023-09-02.
   24620 
   24621 References
   24622 
   24623    1. https://gcc.gnu.org/news/spill.html
   24624    2. https://gcc.gnu.org/news/lcm.html
   24625    3. https://gcc.gnu.org/news/cprop.html
   24626    4. https://gcc.gnu.org/news/cfg.html
   24627    5. https://gcc.gnu.org/news/dse.html
   24628    6. https://gcc.gnu.org/news/hoist.html
   24629    7. https://gcc.gnu.org/news/alias.html
   24630    8. https://gcc.gnu.org/gcc-2.95/c++features.html
   24631    9. https://gcc.gnu.org/onlinedocs/gcc-3.4.6/g77/News.html
   24632   10. https://gcc.gnu.org/news/gcj-announce.txt
   24633   11. https://gcc.gnu.org/news/javaannounce.html
   24634   12. https://gcc.gnu.org/c99status.html
   24635   13. https://gcc.gnu.org/news/chill.html
   24636   14. https://gcc.gnu.org/news/sparc.html
   24637   15. https://gcc.gnu.org/news/egcs-vcg.html
   24638   16. https://gcc.gnu.org/egcs-1.0/features-2.8.html
   24639   17. https://gcc.gnu.org/onlinedocs/
   24640   18. mailto:gcc-help (a] gcc.gnu.org
   24641   19. mailto:gcc (a] gcc.gnu.org
   24642   20. https://gcc.gnu.org/lists.html
   24643   21. https://www.fsf.org/
   24644   22. https://gcc.gnu.org/about.html
   24645 ======================================================================
   24646 http://gcc.gnu.org/gcc-2.95/caveats.html
   24647 
   24648                                 GCC 2.95 Caveats
   24649 
   24650      * GCC 2.95 will issue an error for invalid asm statements that had
   24651        been silently accepted by earlier versions of the compiler. This is
   24652        particularly noticeable when compiling older versions of the Linux
   24653        kernel (2.0.xx). Please refer to the FAQ (as shipped with GCC 2.95)
   24654        for more information on this issue.
   24655      * GCC 2.95 implements type based alias analysis to disambiguate
   24656        memory references. Some programs, particularly the Linux kernel
   24657        violate ANSI/ISO aliasing rules and therefore may not operate
   24658        correctly when compiled with GCC 2.95. Please refer to the FAQ (as
   24659        shipped with GCC 2.95) for more information on this issue.
   24660      * GCC 2.95 has a known bug in its handling of complex variables for
   24661        64bit targets. Instead of silently generating incorrect code, GCC
   24662        2.95 will issue a fatal error for situations it can not handle.
   24663        This primarily affects the Fortran community as Fortran makes more
   24664        use of complex variables than C or C++.
   24665      * GCC 2.95 has an integrated libstdc++, but does not have an
   24666        integrated libg++. Furthermore old libg++ releases will not work
   24667        with GCC 2.95. You can retrieve a recent copy of libg++ from the
   24668        [1]GCC ftp server.
   24669        Note most C++ programs only need libstdc++.
   24670      * Exception handling may not work with shared libraries, particularly
   24671        on alphas, hppas, rs6000/powerpc and mips based platforms.
   24672        Exception handling is known to work on x86 GNU/Linux platforms with
   24673        shared libraries.
   24674      * In general, GCC 2.95 is more rigorous about rejecting invalid C++
   24675        code or deprecated C++ constructs than G++ 2.7, G++ 2.8, EGCS 1.0,
   24676        or EGCS 1.1. As a result it may be necessary to fix C++ code before
   24677        it will compile with GCC 2.95.
   24678      * G++ is also converting toward the ISO C++ standard; as a result
   24679        code which was previously valid (and thus accepted by other
   24680        compilers and older versions of g++) may no longer be accepted. The
   24681        flag -fpermissive may allow some non-conforming code to compile
   24682        with GCC 2.95.
   24683      * GCC 2.95 compiled C++ code is not binary compatible with EGCS
   24684        1.1.x, EGCS 1.0.x or GCC 2.8.x.
   24685      * GCC 2.95 does not have changes from the GCC 2.8 tree that were made
   24686        between Sept 30, 1998 and April 30, 1999 (the official end of the
   24687        GCC 2.8 project). Future GCC releases will include all the changes
   24688        from the defunct GCC 2.8 sources.
   24689 
   24690 
   24691     For questions related to the use of GCC, please consult these web
   24692     pages and the [2]GCC manuals. If that fails, the
   24693     [3]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   24694     web pages and the development of GCC are welcome on our developer
   24695     list at [4]gcc (a] gcc.gnu.org. All of [5]our lists have public archives.
   24696 
   24697    Copyright (C) [6]Free Software Foundation, Inc. Verbatim copying and
   24698    distribution of this entire article is permitted in any medium,
   24699    provided this notice is preserved.
   24700 
   24701    These pages are [7]maintained by the GCC team. Last modified
   24702    2022-10-26.
   24703 
   24704 References
   24705 
   24706    1. ftp://gcc.gnu.org/pub/gcc/infrastructure/libg++-2.8.1.3.tar.gz
   24707    2. https://gcc.gnu.org/onlinedocs/
   24708    3. mailto:gcc-help (a] gcc.gnu.org
   24709    4. mailto:gcc (a] gcc.gnu.org
   24710    5. https://gcc.gnu.org/lists.html
   24711    6. https://www.fsf.org/
   24712    7. https://gcc.gnu.org/about.html
   24713 ======================================================================
   24714 http://gcc.gnu.org/egcs-1.1/index.html
   24715 
   24716                                     EGCS 1.1
   24717 
   24718    September 3, 1998: We are pleased to announce the release of EGCS 1.1.
   24719    December 1, 1998: We are pleased to announce the release of EGCS 1.1.1.
   24720    March 15, 1999: We are pleased to announce the release of EGCS 1.1.2.
   24721 
   24722    EGCS is a free software project to further the development of the GNU
   24723    compilers using an open development environment.
   24724 
   24725    EGCS 1.1 is a major new release of the EGCS compiler system. It has
   24726    been [1]extensively tested and is believed to be stable and suitable
   24727    for widespread use.
   24728 
   24729    EGCS 1.1 is based on an June 6, 1998 snapshot of the GCC 2.8
   24730    development sources; it contains all of the new features found in GCC
   24731    2.8.1 as well as all new development from GCC up to June 6, 1998.
   24732 
   24733    EGCS 1.1 also contains many improvements and features not found in GCC
   24734    or in older versions of EGCS:
   24735      * Global common subexpression elimination and global constant/copy
   24736        propagation (aka [2]gcse)
   24737      * Ongoing improvements to the [3]alias analysis support to allow for
   24738        better optimizations throughout the compiler.
   24739      * Vastly improved [4]C++ compiler and integrated C++ runtime
   24740        libraries.
   24741      * Fixes for the /tmp symlink race security problems.
   24742      * New targets including mips16, arm-thumb and 64-bit PowerPC.
   24743      * Improvements to GNU Fortran (g77) compiler and runtime library made
   24744        since g77 version 0.5.23.
   24745 
   24746    See the [5]new features page for a more complete list of new features
   24747    found in EGCS 1.1 releases.
   24748 
   24749    EGCS 1.1.1 is a minor update to fix several serious problems in EGCS
   24750    1.1:
   24751      * General improvements and fixes
   24752           + Avoid some stack overflows when compiling large functions.
   24753           + Avoid incorrect loop invariant code motions.
   24754           + Fix some core dumps on Linux kernel code.
   24755           + Bring back the imake -Di386 and friends fix from EGCS 1.0.2.
   24756           + Fix code generation problem in gcse.
   24757           + Various documentation related fixes.
   24758      * g++/libstdc++ improvements and fixes
   24759           + MT safe EH fix for setjmp/longjmp based exception handling.
   24760           + Fix a few bad interactions between optimization and exception
   24761             handling.
   24762           + Fixes for demangling of template names starting with "__".
   24763           + Fix a bug that would fail to run destructors in some cases
   24764             with -O2.
   24765           + Fix 'new' of classes with virtual bases.
   24766           + Fix crash building Qt on the Alpha.
   24767           + Fix failure compiling WIFEXITED macro on GNU/Linux.
   24768           + Fix some -frepo failures.
   24769      * g77 and libf2c improvements and fixes
   24770           + Various documentation fixes.
   24771           + Avoid compiler crash on RAND intrinsic.
   24772           + Fix minor bugs in makefiles exposed by BSD make programs.
   24773           + Define _XOPEN_SOURCE for libI77 build to avoid potential
   24774             problems on some 64-bit systems.
   24775           + Fix problem with implicit endfile on rewind.
   24776           + Fix spurious recursive I/O errors.
   24777      * platform specific improvements and fixes
   24778           + Match all versions of UnixWare7.
   24779           + Do not assume x86 SVR4 or UnixWare targets can handle stabs.
   24780           + Fix PPC/RS6000 LEGITIMIZE_ADDRESS macro and bug in conversion
   24781             from unsigned ints to double precision floats.
   24782           + Fix ARM ABI issue with NetBSD.
   24783           + Fix a few arm code generation bugs.
   24784           + Fixincludes will fix additional broken SCO OpenServer header
   24785             files.
   24786           + Fix a m68k back end bug which caused invalid offsets in reg+d
   24787             addresses.
   24788           + Fix problems with 64bit AIX 4.3 support.
   24789           + Fix handling of long longs for varargs/stdarg functions on the
   24790             ppc.
   24791           + Minor fixes to CPP predefines for Windows.
   24792           + Fix code generation problems with gpr<->fpr copies for 64bit
   24793             ppc.
   24794           + Fix a few coldfire code generation bugs.
   24795           + Fix some more header file problems on SunOS 4.x.
   24796           + Fix assert.h handling for RTEMS.
   24797           + Fix Windows handling of TREE_SYMBOL_REFERENCED.
   24798           + Fix x86 compiler abort in reg-stack pass.
   24799           + Fix cygwin/windows problem with section attributes.
   24800           + Fix Alpha code generation problem exposed by SMP Linux
   24801             kernels.
   24802           + Fix typo in m68k 32->64bit integer conversion.
   24803           + Make sure target libraries build with -fPIC for PPC & Alpha
   24804             targets.
   24805 
   24806    EGCS 1.1.2 is a minor update to fix several serious problems in EGCS
   24807    1.1.1:
   24808      * General improvements and fixes
   24809           + Fix bug in loop optimizer which caused the SPARC (and
   24810             potentially other) ports to segfault.
   24811           + Fix infinite recursion in alias analysis and combiner code.
   24812           + Fix bug in regclass preferencing.
   24813           + Fix incorrect loop reversal which caused incorrect code to be
   24814             generated for several targets.
   24815           + Fix return value for builtin memcpy.
   24816           + Reduce compile time for certain loops which exposed quadratic
   24817             behavior in the loop optimizer.
   24818           + Fix bug which caused volatile memory to be written multiple
   24819             times when only one write was needed/desired.
   24820           + Fix compiler abort in caller-save.c
   24821           + Fix combiner bug which caused incorrect code generation for
   24822             certain division by constant operations.
   24823           + Fix incorrect code generation due to a bug in range check
   24824             optimizations.
   24825           + Fix incorrect code generation due to mis-handling of clobbered
   24826             values in CSE.
   24827           + Fix compiler abort/segfault due to incorrect register
   24828             splitting when unrolling loops.
   24829           + Fix code generation involving autoincremented addresses with
   24830             ternary operators.
   24831           + Work around bug in the scheduler which caused qt to be
   24832             mis-compiled on some platforms.
   24833           + Fix code generation problems with -fshort-enums.
   24834           + Tighten security for temporary files.
   24835           + Improve compile time for codes which make heavy use of
   24836             overloaded functions.
   24837           + Fix multiply defined constructor/destructor symbol problems.
   24838           + Avoid setting bogus RPATH environment variable during
   24839             bootstrap.
   24840           + Avoid GNU-make dependencies in the texinfo subdir.
   24841           + Install CPP wrapper script in $(prefix)/bin if --enable-cpp.
   24842             --enable-cpp=<dirname> can be used to specify an additional
   24843             install directory for the cpp wrapper script.
   24844           + Fix CSE bug which caused incorrect label-label refs to appear
   24845             on some platforms.
   24846           + Avoid linking in EH routines from libgcc if they are not
   24847             needed.
   24848           + Avoid obscure bug in aliasing code.
   24849           + Fix bug in weak symbol handling.
   24850      * Platform-specific improvements and fixes
   24851           + Fix detection of PPro/PII on Unixware 7.
   24852           + Fix compiler segfault when building spec99 and other programs
   24853             for SPARC targets.
   24854           + Fix code-generation bugs for integer and floating point
   24855             conditional move instructions on the PPro/PII.
   24856           + Use fixincludes to fix byteorder problems on i?86-*-sysv.
   24857           + Fix build failure for the arc port.
   24858           + Fix floating point format configuration for i?86-gnu port.
   24859           + Fix problems with hppa1.0-hp-hpux10.20 configuration when
   24860             threads are enabled.
   24861           + Fix coldfire code generation bugs.
   24862           + Fix "unrecognized insn" problems for Alpha and PPC ports.
   24863           + Fix h8/300 code generation problem with floating point values
   24864             in memory.
   24865           + Fix unrecognized insn problems for the m68k port.
   24866           + Fix namespace-pollution problem for the x86 port.
   24867           + Fix problems with old assembler on x86 NeXT systems.
   24868           + Fix PIC code-generation problems for the SPARC port.
   24869           + Fix minor bug with LONG_CALLS in PowerPC SVR4 support.
   24870           + Fix minor ISO namespace violation in Alpha varargs/stdarg
   24871             support.
   24872           + Fix incorrect "braf" instruction usage for the SH port.
   24873           + Fix minor bug in va-sh which prevented its use with -ansi.
   24874           + Fix problems recognizing and supporting FreeBSD.
   24875           + Handle OpenBSD systems correctly.
   24876           + Minor fixincludes fix for Digital UNIX 4.0B.
   24877           + Fix problems with ctors/dtors in SCO shared libraries.
   24878           + Abort instead of generating incorrect code for PPro/PII
   24879             floating point conditional moves.
   24880           + Avoid multiply defined symbols on GNU/Linux systems using
   24881             libc-5.4.xx.
   24882           + Fix abort in alpha compiler.
   24883      * Fortran-specific fixes
   24884           + Fix the IDate intrinsic (VXT) (in libg2c) so the returned year
   24885             is in the documented, non-Y2K-compliant range of 0-99, instead
   24886             of being returned as 100 in the year 2000.
   24887           + Fix the `Date_and_Time' intrinsic (in libg2c) to return the
   24888             milliseconds value properly in Values(8).
   24889           + Fix the `LStat' intrinsic (in libg2c) to return device-ID
   24890             information properly in SArray(7).
   24891 
   24892    Each release includes installation instructions in both HTML and
   24893    plaintext forms (see the INSTALL directory in the toplevel directory of
   24894    the distribution). However, we also keep the most up to date
   24895    installation instructions and [6]build/test status on our web page. We
   24896    will update those pages as new information becomes available.
   24897 
   24898    The EGCS project would like to thank the numerous people that have
   24899    contributed new features, test results, bugfixes, etc. This [7]amazing
   24900    group of volunteers is what makes EGCS successful.
   24901 
   24902    And finally, we can't in good conscience fail to mention some
   24903    [8]caveats to using EGCS 1.1.
   24904 
   24905    Download EGCS from egcs.cygnus.com (USA California).
   24906 
   24907    The EGCS 1.1 release is also available on many mirror sites.
   24908    [9]Goto mirror list to find a closer site.
   24909 
   24910 
   24911     For questions related to the use of GCC, please consult these web
   24912     pages and the [10]GCC manuals. If that fails, the
   24913     [11]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   24914     web pages and the development of GCC are welcome on our developer
   24915     list at [12]gcc (a] gcc.gnu.org. All of [13]our lists have public
   24916     archives.
   24917 
   24918    Copyright (C) [14]Free Software Foundation, Inc. Verbatim copying and
   24919    distribution of this entire article is permitted in any medium,
   24920    provided this notice is preserved.
   24921 
   24922    These pages are [15]maintained by the GCC team. Last modified
   24923    2024-05-18.
   24924 
   24925 References
   24926 
   24927    1. https://gcc.gnu.org/egcs-1.1/egcs-1.1-test.html
   24928    2. https://gcc.gnu.org/news/gcse.html
   24929    3. https://gcc.gnu.org/news/alias.html
   24930    4. https://gcc.gnu.org/egcs-1.1/c++features.html
   24931    5. https://gcc.gnu.org/egcs-1.1/features.html
   24932    6. https://gcc.gnu.org/egcs-1.1/buildstat.html
   24933    7. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html
   24934    8. https://gcc.gnu.org/egcs-1.1/caveats.html
   24935    9. https://gcc.gnu.org/mirrors.html
   24936   10. https://gcc.gnu.org/onlinedocs/
   24937   11. mailto:gcc-help (a] gcc.gnu.org
   24938   12. mailto:gcc (a] gcc.gnu.org
   24939   13. https://gcc.gnu.org/lists.html
   24940   14. https://www.fsf.org/
   24941   15. https://gcc.gnu.org/about.html
   24942 ======================================================================
   24943 http://gcc.gnu.org/egcs-1.1/features.html
   24944 
   24945                              EGCS 1.1 new features
   24946 
   24947      * Integrated GNU Fortran (g77) compiler and runtime library with
   24948        improvements, based on g77 version 0.5.23.
   24949      * Vast improvements in the C++ compiler; so many they have [1]page of
   24950        their own!
   24951      * Compiler implements [2]global common subexpression elimination and
   24952        global copy/constant propagation.
   24953      * More major improvements in the [3]alias analysis code.
   24954      * More major improvements in the exception handling code to improve
   24955        performance, lower static overhead and provide the infrastructure
   24956        for future improvements.
   24957      * The infamous /tmp symlink race security problems have been fixed.
   24958      * The regmove optimization pass has been nearly completely rewritten
   24959        to improve performance of generated code.
   24960      * The compiler now recomputes register usage information before local
   24961        register allocation. By providing more accurate information to the
   24962        priority based allocator, we get better register allocation.
   24963      * The register reloading phase of the compiler optimizes spill code
   24964        much better than in previous releases.
   24965      * Some bad interactions between the register allocator and
   24966        instruction scheduler have been fixed, resulting in much better
   24967        code for certain programs. Additionally, we have tuned the
   24968        scheduler in various ways to improve performance of generated code
   24969        for some architectures.
   24970      * The compiler's branch shortening algorithms have been significantly
   24971        improved to work better on targets which align jump targets.
   24972      * The compiler now supports -Os to prefer optimizing for code space
   24973        over optimizing for code speed.
   24974      * The compiler will now totally eliminate library calls which compute
   24975        constant values. This primarily helps targets with no integer
   24976        div/mul support and targets without floating point support.
   24977      * The compiler now supports an extensive "--help" option.
   24978      * cpplib has been greatly improved and may be suitable for limited
   24979        use.
   24980      * Memory footprint for the compiler has been significantly reduced
   24981        for some pathological cases.
   24982      * The time to build EGCS has been improved for certain targets
   24983        (particularly the alpha and mips platforms).
   24984      * Many infrastructure improvements throughout the compiler, plus the
   24985        usual mountain of bugfixes and minor improvements.
   24986      * Target dependent improvements:
   24987           + SPARC port now includes V8 plus and V9 support as well as
   24988             performance tuning for Ultra class machines. The SPARC port
   24989             now uses the Haifa scheduler.
   24990           + Alpha port has been tuned for the EV6 processor and has an
   24991             optimized expansion of memcpy/bzero. The Alpha port now uses
   24992             the Haifa scheduler.
   24993           + RS6000/PowerPC: support for the Power64 architecture and AIX
   24994             4.3. The RS6000/PowerPC port now uses the Haifa scheduler.
   24995           + x86: Alignment of static store data and jump targets is per
   24996             Intel recommendations now. Various improvements throughout the
   24997             x86 port to improve performance on Pentium processors
   24998             (including improved epilogue sequences for Pentium chips and
   24999             back end improvements which should help register allocation on
   25000             all x86 variants. Conditional move support has been fixed and
   25001             enabled for PPro processors. The x86 port also better supports
   25002             64bit operations now. Unixware 7, a System V Release 5 target,
   25003             is now supported and SCO OpenServer targets can support GAS.
   25004           + MIPS has improved multiply/multiply-add support and now
   25005             includes mips16 ISA support.
   25006           + M68k has many micro-optimizations and Coldfire fixes.
   25007      * Core compiler is based on the GCC development tree from June 9,
   25008        1998, so we have all of the [4]features found in GCC 2.8.
   25009 
   25010 
   25011     For questions related to the use of GCC, please consult these web
   25012     pages and the [5]GCC manuals. If that fails, the
   25013     [6]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   25014     web pages and the development of GCC are welcome on our developer
   25015     list at [7]gcc (a] gcc.gnu.org. All of [8]our lists have public archives.
   25016 
   25017    Copyright (C) [9]Free Software Foundation, Inc. Verbatim copying and
   25018    distribution of this entire article is permitted in any medium,
   25019    provided this notice is preserved.
   25020 
   25021    These pages are [10]maintained by the GCC team. Last modified
   25022    2023-09-02.
   25023 
   25024 References
   25025 
   25026    1. https://gcc.gnu.org/egcs-1.1/c++features.html
   25027    2. https://gcc.gnu.org/news/gcse.html
   25028    3. https://gcc.gnu.org/news/alias.html
   25029    4. https://gcc.gnu.org/egcs-1.0/features-2.8.html
   25030    5. https://gcc.gnu.org/onlinedocs/
   25031    6. mailto:gcc-help (a] gcc.gnu.org
   25032    7. mailto:gcc (a] gcc.gnu.org
   25033    8. https://gcc.gnu.org/lists.html
   25034    9. https://www.fsf.org/
   25035   10. https://gcc.gnu.org/about.html
   25036 ======================================================================
   25037 http://gcc.gnu.org/egcs-1.1/caveats.html
   25038 
   25039                                 EGCS 1.1 Caveats
   25040 
   25041      * EGCS has an integrated libstdc++, but does not have an integrated
   25042        libg++. Furthermore old libg++ releases will not work with EGCS; HJ
   25043        Lu has made a libg++-2.8.1.2 snapshot available which may work with
   25044        EGCS.
   25045        Note most C++ programs only need libstdc++.
   25046      * Exception handling may not work with shared libraries, particularly
   25047        on alphas, hppas, rs6000/powerpc and mips based platforms.
   25048        Exception handling is known to work on x86-linux platforms with
   25049        shared libraries.
   25050      * Some versions of the Linux kernel have bugs which prevent them from
   25051        being compiled or from running when compiled by EGCS. See the FAQ
   25052        (as shipped with EGCS 1.1) for additional information.
   25053      * In general, EGCS is more rigorous about rejecting invalid C++ code
   25054        or deprecated C++ constructs than g++-2.7, g++-2.8 or EGCS 1.0. As
   25055        a result it may be necessary to fix C++ code before it will compile
   25056        with EGCS.
   25057      * G++ is also converting toward the ISO C++ standard; as a result
   25058        code which was previously valid (and thus accepted by other
   25059        compilers and older versions of g++) may no longer be accepted.
   25060      * EGCS 1.1 compiled C++ code is not binary compatible with EGCS 1.0.x
   25061        or GCC 2.8.x due to changes necessary to support thread safe
   25062        exception handling.
   25063 
   25064 
   25065     For questions related to the use of GCC, please consult these web
   25066     pages and the [1]GCC manuals. If that fails, the
   25067     [2]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   25068     web pages and the development of GCC are welcome on our developer
   25069     list at [3]gcc (a] gcc.gnu.org. All of [4]our lists have public archives.
   25070 
   25071    Copyright (C) [5]Free Software Foundation, Inc. Verbatim copying and
   25072    distribution of this entire article is permitted in any medium,
   25073    provided this notice is preserved.
   25074 
   25075    These pages are [6]maintained by the GCC team. Last modified
   25076    2022-10-26.
   25077 
   25078 References
   25079 
   25080    1. https://gcc.gnu.org/onlinedocs/
   25081    2. mailto:gcc-help (a] gcc.gnu.org
   25082    3. mailto:gcc (a] gcc.gnu.org
   25083    4. https://gcc.gnu.org/lists.html
   25084    5. https://www.fsf.org/
   25085    6. https://gcc.gnu.org/about.html
   25086 ======================================================================
   25087 http://gcc.gnu.org/egcs-1.0/index.html
   25088 
   25089                                     EGCS 1.0
   25090 
   25091    December 3, 1997: We are pleased to announce the release of EGCS 1.0.
   25092    January 6, 1998: We are pleased to announce the release of EGCS 1.0.1.
   25093    March 16, 1998: We are pleased to announce the release of EGCS 1.0.2.
   25094    May 15, 1998 We are pleased to announce the release of EGCS 1.0.3.
   25095 
   25096    EGCS is a collaborative effort involving several groups of hackers
   25097    using an open development model to accelerate development and testing
   25098    of GNU compilers and runtime libraries.
   25099 
   25100    An important goal of EGCS is to allow wide scale testing of
   25101    experimental features and optimizations; therefore, EGCS contains some
   25102    features and optimizations which are still under development. However,
   25103    EGCS has been carefully tested and should be comparable in quality to
   25104    most GCC releases.
   25105 
   25106    EGCS 1.0 is based on an August 2, 1997 snapshot of the GCC 2.8
   25107    development sources; it contains nearly all of the new features found
   25108    in GCC 2.8.
   25109 
   25110    EGCS 1.0 also contains many improvements and features not found in GCC
   25111    2.7 and even the GCC 2.8 series (which was released after the original
   25112    EGCS 1.0 release).
   25113      * Integrated C++ runtime libraries, including support for most major
   25114        GNU/Linux systems!
   25115      * The integrated libstdc++ library includes a verbatim copy of SGI's
   25116        STL release.
   25117      * Integrated GNU Fortran compiler.
   25118      * New instruction scheduler.
   25119      * New alias analysis code.
   25120 
   25121    See the [1]new features page for a more complete list of new features.
   25122 
   25123    EGCS 1.0.1 is a minor update to the EGCS 1.0 compiler to fix a few
   25124    critical bugs and add support for Red Hat 5.0 Linux. Changes since the
   25125    EGCS 1.0 release:
   25126      * Add support for Red Hat 5.0 Linux and better support for Linux
   25127        systems using glibc2.
   25128        Many programs failed to link when compiled with EGCS 1.0 on Red Hat
   25129        5.0 or on systems with newer versions of glibc2. EGCS 1.0.1 should
   25130        fix these problems.
   25131      * Compatibility with both EGCS 1.0 and GCC 2.8 libgcc exception
   25132        handling interfaces.
   25133        To avoid future compatibility problems, we strongly urge anyone who
   25134        is planning on distributing shared libraries that contain C++ code
   25135        to upgrade to EGCS 1.0.1 first.
   25136        Soon after EGCS 1.0 was released, the GCC developers made some
   25137        incompatible changes in libgcc's exception handling interfaces.
   25138        These changes were needed to solve problems on some platforms. This
   25139        means that GCC 2.8.0, when released, will not be seamlessly
   25140        compatible with shared libraries built by EGCS 1.0. The reason is
   25141        that the libgcc.a in GCC 2.8.0 will not contain a function needed
   25142        by the old interface.
   25143        The result of this is that there may be compatibility problems with
   25144        shared libraries built by EGCS 1.0 when used with GCC 2.8.0.
   25145        With EGCS 1.0.1, generated code uses the new (GCC 2.8.0) interface,
   25146        and libgcc.a has the support routines for both the old and the new
   25147        interfaces (so EGCS 1.0.1 and EGCS 1.0 code can be freely mixed,
   25148        and EGCS 1.0.1 and GCC 2.8.0 code can be freely mixed).
   25149        The maintainers of GCC 2.x have decided against including seamless
   25150        support for the old interface in 2.8.0, since it was never
   25151        "official", so to avoid future compatibility problems we recommend
   25152        against distributing any shared libraries built by EGCS 1.0 that
   25153        contain C++ code (upgrade to 1.0.1 and use that).
   25154      * Various bugfixes in the x86, hppa, mips, and rs6000/ppc back ends.
   25155        The x86 changes fix code generation errors exposed when building
   25156        glibc2 and the usual GNU/Linux dynamic linker (ld.so).
   25157        The hppa change fixes a compiler abort when configured for use with
   25158        RTEMS.
   25159        The MIPS changes fix problems with the definition of LONG_MAX on
   25160        newer systems, allow for command line selection of the target ABI,
   25161        and fix one code generation problem.
   25162        The rs6000/ppc change fixes some problems with passing structures
   25163        to varargs/stdarg functions.
   25164      * A few machine independent bugfixes, mostly to fix code generation
   25165        errors when building Linux kernels or glibc.
   25166      * Fix a few critical exception handling and template bugs in the C++
   25167        compiler.
   25168      * Fix Fortran namelist bug on alphas.
   25169      * Fix build problems on x86-solaris systems.
   25170 
   25171    EGCS 1.0.2 is a minor update to the EGCS 1.0.1 compiler to fix several
   25172    serious problems in EGCS 1.0.1.
   25173      * General improvements and fixes
   25174           + Memory consumption significantly reduced, especially for
   25175             templates and inline functions.
   25176           + Fix various problems with glibc2.1.
   25177           + Fix loop optimization bug exposed by rs6000/ppc port.
   25178           + Fix to avoid potential code generation problems in jump.c.
   25179           + Fix some undefined symbol problems in dwarf1 debug support.
   25180      * g++/libstdc++ improvements and fixes
   25181           + libstdc++ in the EGCS release has been updated and should be
   25182             link compatible with libstdc++-2.8.
   25183           + Various fixes in libio/libstdc++ to work better on GNU/Linux
   25184             systems.
   25185           + Fix problems with duplicate symbols on systems that do not
   25186             support weak symbols.
   25187           + Memory corruption bug and undefined symbols in bastring have
   25188             been fixed.
   25189           + Various exception handling fixes.
   25190           + Fix compiler abort for very long thunk names.
   25191      * g77 improvements and fixes
   25192           + Fix compiler crash for omitted bound in Fortran CASE
   25193             statement.
   25194           + Add missing entries to g77 lang-options.
   25195           + Fix problem with -fpedantic in the g77 compiler.
   25196           + Fix "backspace" problem with g77 on alphas.
   25197           + Fix x86 back end problem with Fortran literals and -fpic.
   25198           + Fix some of the problems with negative subscripts for g77 on
   25199             alphas.
   25200           + Fixes for Fortran builds on cygwin32/mingw32.
   25201      * platform specific improvements and fixes
   25202           + Fix long double problems on x86 (exposed by glibc).
   25203           + x86 ports define i386 again to keep imake happy.
   25204           + Fix exception handling support on NetBSD ports.
   25205           + Several changes to collect2 to fix many problems with AIX.
   25206           + Define __ELF__ for GNU/Linux on rs6000.
   25207           + Fix -mcall-linux problem on GNU/Linux on rs6000.
   25208           + Fix stdarg/vararg problem for GNU/Linux on rs6000.
   25209           + Allow autoconf to select a proper install problem on AIX 3.1.
   25210           + m68k port support includes -mcpu32 option as well as cpu32
   25211             multilibs.
   25212           + Fix stdarg bug for irix6.
   25213           + Allow EGCS to build on irix5 without the gnu assembler.
   25214           + Fix problem with static linking on sco5.
   25215           + Fix bootstrap on sco5 with native compiler.
   25216           + Fix for abort building newlib on H8 target.
   25217           + Fix fixincludes handling of math.h on SunOS.
   25218           + Minor fix for Motorola 3300 m68k systems.
   25219 
   25220    EGCS 1.0.3 is a minor update to the EGCS 1.0.2 compiler to fix a few
   25221    problems reported by Red Hat for builds of Red Hat 5.1.
   25222      * Generic bugfixes:
   25223           + Fix a typo in the libio library which resulted in incorrect
   25224             behavior of istream::get.
   25225           + Fix the Fortran negative array index problem.
   25226           + Fix a major problem with the ObjC runtime thread support
   25227             exposed by glibc2.
   25228           + Reduce memory consumption of the Haifa scheduler.
   25229      * Target specific bugfixes:
   25230           + Fix one x86 floating point code generation bug exposed by
   25231             glibc2 builds.
   25232           + Fix one x86 internal compiler error exposed by glibc2 builds.
   25233           + Fix profiling bugs on the Alpha.
   25234           + Fix ImageMagick & emacs 20.2 build problems on the Alpha.
   25235           + Fix rs6000/ppc bug when converting values from integer types
   25236             to floating point types.
   25237 
   25238    The EGCS 1.0 releases include installation instructions in both HTML
   25239    and plaintext forms (see the INSTALL directory in the toplevel
   25240    directory of the distribution). However, we also keep the most up to
   25241    date installation instructions and [2]build/test status on our web
   25242    page. We will update those pages as new information becomes available.
   25243 
   25244    And, we can't in good conscience fail to mention some [3]caveats to
   25245    using EGCS.
   25246 
   25247    Update: Big thanks to Stanford for providing a high speed link for
   25248    downloading EGCS (go.cygnus.com)!
   25249 
   25250    Download EGCS from ftp.cygnus.com (USA California) or go.cygnus.com
   25251    (USA California -- High speed link provided by Stanford).
   25252 
   25253    The EGCS 1.0 release is also available many mirror sites.
   25254    [4]Goto mirror list to find a closer site
   25255 
   25256    We'd like to thank the numerous people that have contributed new
   25257    features, test results, bugfixes, etc. Unfortunately, they're far too
   25258    numerous to mention by name.
   25259 
   25260 
   25261     For questions related to the use of GCC, please consult these web
   25262     pages and the [5]GCC manuals. If that fails, the
   25263     [6]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   25264     web pages and the development of GCC are welcome on our developer
   25265     list at [7]gcc (a] gcc.gnu.org. All of [8]our lists have public archives.
   25266 
   25267    Copyright (C) [9]Free Software Foundation, Inc. Verbatim copying and
   25268    distribution of this entire article is permitted in any medium,
   25269    provided this notice is preserved.
   25270 
   25271    These pages are [10]maintained by the GCC team. Last modified
   25272    2023-09-02.
   25273 
   25274 References
   25275 
   25276    1. https://gcc.gnu.org/egcs-1.0/features.html
   25277    2. https://gcc.gnu.org/egcs-1.0/buildstat.html
   25278    3. https://gcc.gnu.org/egcs-1.0/caveats.html
   25279    4. https://gcc.gnu.org/mirrors.html
   25280    5. https://gcc.gnu.org/onlinedocs/
   25281    6. mailto:gcc-help (a] gcc.gnu.org
   25282    7. mailto:gcc (a] gcc.gnu.org
   25283    8. https://gcc.gnu.org/lists.html
   25284    9. https://www.fsf.org/
   25285   10. https://gcc.gnu.org/about.html
   25286 ======================================================================
   25287 http://gcc.gnu.org/egcs-1.0/features.html
   25288 
   25289                                EGCS 1.0 features
   25290 
   25291      * Core compiler is based on the gcc2 development tree from Aug 2,
   25292        1997, so we have most of the [1]features found in GCC 2.8.
   25293      * Integrated GNU Fortran compiler based on g77-0.5.22-19970929.
   25294      * Vast improvements in the C++ compiler; so many they have [2]page of
   25295        their own!
   25296      * Integrated C++ runtime libraries, including support for most major
   25297        GNU/Linux systems!
   25298      * New instruction scheduler from IBM Haifa which includes support for
   25299        function wide instruction scheduling as well as superscalar
   25300        scheduling.
   25301      * Significantly improved alias analysis code.
   25302      * Improved register allocation for two address machines.
   25303      * Significant code generation improvements for Fortran code on
   25304        Alphas.
   25305      * Various optimizations from the g77 project as well as improved loop
   25306        optimizations.
   25307      * Dwarf2 debug format support for some targets.
   25308      * egcs libstdc++ includes the SGI STL implementation without changes.
   25309      * As a result of these and other changes, egcs libstc++ is not binary
   25310        compatible with previous releases of libstdc++.
   25311      * Various new ports -- UltraSPARC, Irix6.2 & Irix6.3 support, The SCO
   25312        Openserver 5 family (5.0.{0,2,4} and Internet FastStart 1.0 and
   25313        1.1), Support for RTEMS on several embedded targets, Support for
   25314        arm-linux, Mitsubishi M32R, Hitachi H8/S, Matsushita MN102 and
   25315        MN103, NEC V850, Sparclet, Solaris & GNU/Linux on PowerPCs, etc.
   25316      * Integrated testsuites for gcc, g++, g77, libstdc++ and libio.
   25317      * RS6000/PowerPC ports generate code which can run on all
   25318        RS6000/PowerPC variants by default.
   25319      * -mcpu= and -march= switches for the x86 port to allow better
   25320        control over how the x86 port generates code.
   25321      * Includes the template repository patch (aka repo patch); note the
   25322        new template code makes repo obsolete for ELF systems using gnu-ld
   25323        such as GNU/Linux.
   25324      * Plus the usual assortment of bugfixes and improvements.
   25325 
   25326 
   25327     For questions related to the use of GCC, please consult these web
   25328     pages and the [3]GCC manuals. If that fails, the
   25329     [4]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   25330     web pages and the development of GCC are welcome on our developer
   25331     list at [5]gcc (a] gcc.gnu.org. All of [6]our lists have public archives.
   25332 
   25333    Copyright (C) [7]Free Software Foundation, Inc. Verbatim copying and
   25334    distribution of this entire article is permitted in any medium,
   25335    provided this notice is preserved.
   25336 
   25337    These pages are [8]maintained by the GCC team. Last modified
   25338    2022-10-26.
   25339 
   25340 References
   25341 
   25342    1. https://gcc.gnu.org/egcs-1.0/features-2.8.html
   25343    2. https://gcc.gnu.org/egcs-1.0/c++features.html
   25344    3. https://gcc.gnu.org/onlinedocs/
   25345    4. mailto:gcc-help (a] gcc.gnu.org
   25346    5. mailto:gcc (a] gcc.gnu.org
   25347    6. https://gcc.gnu.org/lists.html
   25348    7. https://www.fsf.org/
   25349    8. https://gcc.gnu.org/about.html
   25350 ======================================================================
   25351 http://gcc.gnu.org/egcs-1.0/caveats.html
   25352 
   25353                                 EGCS 1.0 Caveats
   25354 
   25355      * EGCS has an integrated libstdc++, but does not have an integrated
   25356        libg++. Furthermore old libg++ releases will not work with egc; HJ
   25357        Lu has made a libg++-2.8.1.2 available which may work with EGCS.
   25358        Note most C++ programs only need libstdc++.
   25359      * Note that using -pedantic or -Wreturn-type can cause an explosion
   25360        in the amount of memory needed for template-heavy C++ code, such as
   25361        code that uses STL. Also note that -Wall includes -Wreturn-type, so
   25362        if you use -Wall you will need to specify -Wno-return-type to turn
   25363        it off.
   25364      * Exception handling may not work with shared libraries, particularly
   25365        on alphas, hppas, and mips based platforms. Exception handling is
   25366        known to work on x86-linux platforms with shared libraries.
   25367      * Some versions of the Linux kernel have bugs which prevent them from
   25368        being compiled or from running when compiled by EGCS. See the FAQ
   25369        (as shipped with EGCS 1.0) for additional information.
   25370      * In general, EGCS is more rigorous about rejecting invalid C++ code
   25371        or deprecated C++ constructs than G++ 2.7. As a result it may be
   25372        necessary to fix C++ code before it will compile with EGCS.
   25373      * G++ is also aggressively tracking the C++ standard; as a result
   25374        code which was previously valid (and thus accepted by other
   25375        compilers and older versions of G++) may no longer be accepted.
   25376      * EGCS 1.0 may not work with Red Hat Linux 5.0 on all targets. EGCS
   25377        1.0.x and later releases should work with Red Hat Linux 5.0.
   25378 
   25379 
   25380     For questions related to the use of GCC, please consult these web
   25381     pages and the [1]GCC manuals. If that fails, the
   25382     [2]gcc-help (a] gcc.gnu.org mailing list might help. Comments on these
   25383     web pages and the development of GCC are welcome on our developer
   25384     list at [3]gcc (a] gcc.gnu.org. All of [4]our lists have public archives.
   25385 
   25386    Copyright (C) [5]Free Software Foundation, Inc. Verbatim copying and
   25387    distribution of this entire article is permitted in any medium,
   25388    provided this notice is preserved.
   25389 
   25390    These pages are [6]maintained by the GCC team. Last modified
   25391    2022-10-26.
   25392 
   25393 References
   25394 
   25395    1. https://gcc.gnu.org/onlinedocs/
   25396    2. mailto:gcc-help (a] gcc.gnu.org
   25397    3. mailto:gcc (a] gcc.gnu.org
   25398    4. https://gcc.gnu.org/lists.html
   25399    5. https://www.fsf.org/
   25400    6. https://gcc.gnu.org/about.html
   25401 ======================================================================
   25402