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 🙂 ("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