summaryrefslogtreecommitdiff
path: root/debian/NEWS.gcc
diff options
context:
space:
mode:
authorIgor Pashev <pashev.igor@gmail.com>2019-11-18 15:53:29 +0300
committerIgor Pashev <pashev.igor@gmail.com>2019-11-18 15:53:29 +0300
commit8f6c4b0033c72f8ac14694c419a99458339dd6a9 (patch)
tree06c106e622a58100aa85a381b9b65d222b076df4 /debian/NEWS.gcc
parent42156b5190f4fa150e1fab6777eb81e69d4db8c9 (diff)
downloadgcc-9-8f6c4b0033c72f8ac14694c419a99458339dd6a9.tar.gz
Import gcc-9 (9.2.1-19)debian/9.2.1-19debian
Diffstat (limited to 'debian/NEWS.gcc')
-rw-r--r--debian/NEWS.gcc1580
1 files changed, 895 insertions, 685 deletions
diff --git a/debian/NEWS.gcc b/debian/NEWS.gcc
index 11e6954..aeccd06 100644
--- a/debian/NEWS.gcc
+++ b/debian/NEWS.gcc
@@ -1,707 +1,917 @@
-This file contains information about GCC releases which has been generated
-automatically from the online release notes. It covers releases of GCC
-(and the former EGCS project) since EGCS 1.0, on the line of development
-that led to GCC 3. For information on GCC 2.8.1 and older releases of GCC 2,
-see ONEWS.
-
-======================================================================
-http://gcc.gnu.org/gcc-6/index.html
- GCC 6 Release Series
-
- April 27, 2015
-
- The [1]GNU project and the GCC developers are pleased to announce the
- release of GCC 6.1.
-
- This release is a major release, containing new features (as well as
- many other improvements) relative to GCC 5.x.
-
-Release History
-
- GCC 6.1
- April 27, 2015 ([2]changes, [3]documentation)
-
-References and Acknowledgements
-
- GCC used to stand for the GNU C Compiler, but since the compiler
- supports several other languages aside from C, it now stands for the
- GNU Compiler Collection.
-
- A list of [4]successful builds is updated as new information becomes
- available.
-
- The GCC developers would like to thank the numerous people that have
- contributed new features, improvements, bug fixes, and other changes as
- well as test results to GCC. This [5]amazing group of volunteers is
- what makes GCC successful.
-
- For additional information about GCC please refer to the [6]GCC project
- web site or contact the [7]GCC development mailing list.
-
- To obtain GCC please use [8]our mirror sites or [9]our SVN server.
-
-
- For questions related to the use of GCC, please consult these web
- pages and the [10]GCC manuals. If that fails, the
- [11]gcc-help@gcc.gnu.org mailing list might help. Comments on these
- web pages and the development of GCC are welcome on our developer
- list at [12]gcc@gcc.gnu.org. All of [13]our lists have public
- archives.
-
- Copyright (C) [14]Free Software Foundation, Inc. Verbatim copying and
- distribution of this entire article is permitted in any medium,
- provided this notice is preserved.
-
- These pages are [15]maintained by the GCC team. Last modified
- 2016-04-27[16].
-
-References
-
- 1. http://www.gnu.org/
- 2. http://gcc.gnu.org/gcc-6/changes.html
- 3. http://gcc.gnu.org/onlinedocs/6.1.0/
- 4. http://gcc.gnu.org/gcc-6/buildstat.html
- 5. http://gcc.gnu.org/onlinedocs/gcc/Contributors.html
- 6. http://gcc.gnu.org/index.html
- 7. mailto:gcc@gcc.gnu.org
- 8. http://gcc.gnu.org/mirrors.html
- 9. http://gcc.gnu.org/svn.html
- 10. https://gcc.gnu.org/onlinedocs/
- 11. mailto:gcc-help@gcc.gnu.org
- 12. mailto:gcc@gcc.gnu.org
- 13. https://gcc.gnu.org/lists.html
- 14. http://www.fsf.org/
- 15. https://gcc.gnu.org/about.html
- 16. http://validator.w3.org/check/referer
-======================================================================
-http://gcc.gnu.org/gcc-6/changes.html
- GCC 6 Release Series
- Changes, New Features, and Fixes
-
- This page is a brief summary of some of the huge number of improvements
- in GCC 6. For more information, see the [1]Porting to GCC 6 page and
- the [2]full GCC documentation.
+ GCC 8 Release Series
+ Changes, New Features, and Fixes
+
+This page is a "brief" summary of some of the huge number of improvements in
+GCC 8. You may also want to check out our Porting_to_GCC_8 page and the full
+GCC_documentation.
Caveats
- * The default mode for C++ is now -std=gnu++14 instead of
- -std=gnu++98.
- * Support for a number of older systems and recently unmaintained or
- untested target ports of GCC has been declared obsolete in GCC 6.
- Unless there is activity to revive them, the next release of GCC
- will have their sources permanently removed.
- The following ports for individual systems on particular
- architectures have been obsoleted:
- + SH5 / SH64 (sh64-*-*) as announced [3]here.
-
-General Optimizer Improvements
-
- * UndefinedBehaviorSanitizer gained a new sanitization option,
- -fsanitize=bounds-strict, which enables strict checking of array
- bounds. In particular, it enables -fsanitize=bounds as well as
- instrumentation of flexible array member-like arrays.
- * Type-based alias analysis now disambiguates accesses to different
- pointers. This improves precision of the alias oracle by about
- 20-30% on higher-level C++ programs. Programs doing invalid type
- punning of pointer types may now need -fno-strict-aliasing to work
- correctly.
- * Alias analysis now correctly supports weakref and alias attributes.
- This makes it possible to access both a variable and its alias in
- one translation unit which is common with link-time optimization.
- * Value range propagation now assumes that the this pointer of C++
- member functions is non-null. This eliminates common null pointer
- checks but also breaks some non-conforming code-bases (such as
- Qt-5, Chromium, KDevelop). As a temporary work-around
- -fno-delete-null-pointer-checks can be used. Wrong code can be
- identified by using -fsanitize=undefined.
- * Link-time optimization improvements:
- + warning and error attributes are now correctly preserved by
- declaration linking and thus -D_FORTIFY_SOURCE=2 is now
- supported with -flto.
- + Type merging was fixed to handle C and Fortran
- interoperability rules as defined by the Fortran 2008 language
- standard.
- As an exception, CHARACTER(KIND=C_CHAR) is not inter-operable
- with char in all cases because it is an array while char is
- scalar. INTEGER(KIND=C_SIGNED_CHAR) should be used instead. In
- general, this inter-operability cannot be implemented, for
- example, on targets where function passing conventions of
- arrays differs from scalars.
- + More type information is now preserved at link time reducing
- the loss of accuracy of the type based alias analysis compared
- to builds without link-time optimization.
- + Invalid type punning on global variables and declarations is
- now reported with -Wodr-type-mismatch.
- + The size of LTO object files was reduced by about 11%
- (measured by compiling Firefox 46.0).
- + Link-time parallelization (enabled using -flto=n) was
- significantly improved by decreasing the size of streamed data
- when partitioning programs. The size of streamed IL while
- compiling Firefox 46.0 was reduced by 66%.
- + The linker plugin was extended to pass information about type
- of binary produced to GCC back end (that can be also manually
- controlled by -flinker-output). This makes it possible to
- properly configure the code generator and support incremental
- linking. Incremental linking of LTO objects by gcc -r is now
- supported on plugin-enabled setups.
- There are two ways to perform incremental linking:
- 1. Linking by ld -r will result in an object file with all
- sections from individual object files mechanically
- merged. This delays the actual link time optimization to
- final linking step and thus permits whole program
- optimization. Linking final binary with such object files
- is however slower.
- 2. Linking by gcc -r will lead to link time optimization and
- produce final binary into the object file. Linking such
- object file is fast but avoids any benefits from whole
- program optimization.
- GCC 7 will support incremental link-time optimization with gcc
- -r.
- * Inter-procedural optimization improvements:
- + Basic jump threading is now performed before profile
- construction and inline analysis, resulting in more realistic
- size and time estimates that drive the heuristics of the of
- inliner and function cloning passes.
- + Function cloning now more aggressively eliminates unused
- function parameters.
+ * Support for the obsolete SDB/coff debug info format has been removed. The
+ option -gcoff no longer does anything.
+ * The Cilk+ extensions to the C and C++ languages have been removed.
+ * The MPX extensions to the C and C++ languages have been deprecated and
+ will be removed in a future release.
+ * The extension allowing arithmetic on std::atomic<void*> and types like
+ std::atomic<R(*)()> has been deprecated.
+ * The non-standard C++0x std::copy_exception function was removed. std::
+ make_exception_ptr should be used instead.
+ * Support for the powerpc*-*-*spe* target ports which have been recently
+ unmaintained and untested in GCC has been declared obsolete in GCC 8 as
+ announced here. Unless there is activity to revive them, the next release
+ of GCC will have their sources permanently removed.
+
+General Improvements
+
+ * Inter-procedural optimization improvements:
+ o Reworked run-time estimation metrics leading to more realistic
+ guesses driving inliner and cloning heuristics.
+ o The ipa-pure-const pass is extended to propagate the malloc
+ attribute, and the corresponding warning option -Wsuggest-
+ attribute=malloc emits a diagnostic for functions which can be
+ annotated with the malloc attribute.
+ * Profile driven optimization improvements:
+ o New infrastructure for representing profiles (both statically
+ guessed and profile feedback) which allows propagation of
+ additional information about the reliability of the profile.
+ o A number of improvements in the profile updating code solving
+ problems found by new verification code.
+ o Static detection of code which is not executed in a valid run of
+ the program. This includes paths which trigger undefined behavior
+ as well as calls to functions declared with the cold attribute.
+ Newly the noreturn attribute does not imply all effects of cold to
+ differentiate between exit (which is noreturn) and abort (which is
+ in addition not executed in valid runs).
+ o -freorder-blocks-and-partition, a pass splitting function bodies
+ into hot and cold regions, is now enabled by default at -O2 and
+ higher for x86 and x86-64.
+ * Link-time optimization improvements:
+ o We have significantly improved debug information on ELF targets
+ using DWARF by properly preserving language-specific information.
+ This allows for example the libstdc++ pretty-printers to work with
+ LTO optimized executables.
+ * A new option -fcf-protection=[full|branch|return|none] is introduced to
+ perform code instrumentation to increase program security by checking
+ that target addresses of control-flow transfer instructions (such as
+ indirect function call, function return, indirect jump) are valid.
+ Currently the instrumentation is supported on x86 GNU/Linux targets only.
+ See the user guide for further information about the option syntax and
+ section "New Targets and Target Specific Improvements" for IA-32/x86-64
+ for more details.
+ * The -gcolumn-info option is now enabled by default. It includes column
+ information in addition to just filenames and line numbers in DWARF
+ debugging information.
+ * The polyhedral-based loop nest optimization pass -floop-nest-optimize has
+ been overhauled. It's still considered experimental and may not result in
+ any runtime improvements.
+ * Two new classical loop nest optimization passes have been added. -floop-
+ unroll-and-jam performs outer loop unrolling and fusing of the inner loop
+ copies. -floop-interchange exchanges loops in a loop nest to improve data
+ locality. Both passes are enabled by default at -O3 and above.
+ * The classic loop nest optimization pass -ftree-loop-distribution has been
+ improved and enabled by default at -O3 and above. It supports loop nest
+ distribution in some restricted scenarios; it also supports cancellable
+ innermost loop distribution with loop versioning under run-time alias
+ checks.
+ * The new option -fstack-clash-protection causes the compiler to insert
+ probes whenever stack space is allocated statically or dynamically to
+ reliably detect stack overflows and thus mitigate the attack vector that
+ relies on jumping over a stack guard page as provided by the operating
+ system.
+ * A new pragma GCC unroll has been implemented in the C family of
+ languages, as well as Fortran and Ada, so as to make it possible for the
+ user to have a finer-grained control over the loop unrolling
+ optimization.
+ * GCC has been enhanced to detect more instances of meaningless or mutually
+ exclusive attribute specifications and handle such conflicts more
+ consistently. Mutually exclusive attribute specifications are ignored
+ with a warning regardless of whether they appear on the same declaration
+ or on distinct declarations of the same entity. For example, because the
+ noreturn attribute on the second declaration below is mutually exclusive
+ with the malloc attribute on the first, it is ignored and a warning is
+ issued.
+ void* __attribute__ ((malloc)) f (unsigned);
+ void* __attribute__ ((noreturn)) f (unsigned);
+
+ warning: ignoring attribute 'noreturn' because it conflicts with
+ attribute 'malloc' [-Wattributes]
+ * The gcov tool can distinguish functions that begin on a same line in a
+ source file. This can be a different template instantiation or a class
+ constructor:
+ File 'ins.C'
+ Lines executed:100.00% of 8
+ Creating 'ins.C.gcov'
+
+ -: 0:Source:ins.C
+ -: 0:Graph:ins.gcno
+ -: 0:Data:ins.gcda
+ -: 0:Runs:1
+ -: 0:Programs:1
+ -: 1:template<class T>
+ -: 2:class Foo
+ -: 3:{
+ -: 4: public:
+ 2: 5: Foo(): b (1000) {}
+ ------------------
+ Foo<char>::Foo():
+ 1: 5: Foo(): b (1000) {}
+ ------------------
+ Foo<int>::Foo():
+ 1: 5: Foo(): b (1000) {}
+ ------------------
+ 2: 6: void inc () { b++; }
+ ------------------
+ Foo<char>::inc():
+ 1: 6: void inc () { b++; }
+ ------------------
+ Foo<int>::inc():
+ 1: 6: void inc () { b++; }
+ ------------------
+ -: 7:
+ -: 8: private:
+ -: 9: int b;
+ -: 10:};
+ -: 11:
+ 1: 12:int main(int argc, char **argv)
+ -: 13:{
+ 1: 14: Foo<int> a;
+ 1: 15: Foo<char> b;
+ -: 16:
+ 1: 17: a.inc ();
+ 1: 18: b.inc ();
+ 1: 19:}
+ * The gcov tool has more accurate numbers for execution of lines in a
+ source file.
+ * The gcov tool can use TERM colors to provide more readable output.
+ * AddressSanitizer gained a new pair of sanitization options, -
+ fsanitize=pointer-compare and -fsanitize=pointer-subtract, which warn
+ about subtraction (or comparison) of pointers that point to a different
+ memory object:
+ int
+ main ()
+ {
+ /* Heap allocated memory. */
+ char *heap1 = (char *)__builtin_malloc (42);
+ char *heap2 = (char *)__builtin_malloc (42);
+ if (heap1 > heap2)
+ return 1;
+
+ return 0;
+ }
+
+ ==17465==ERROR: AddressSanitizer: invalid-pointer-pair:
+ 0x604000000010 0x604000000050
+ #0 0x40070f in main /tmp/pointer-compare.c:7
+ #1 0x7ffff6a72a86 in __libc_start_main (/lib64/
+ libc.so.6+0x21a86)
+ #2 0x400629 in _start (/tmp/a.out+0x400629)
+
+ 0x604000000010 is located 0 bytes inside of 42-byte region
+ [0x604000000010,0x60400000003a)
+ allocated by thread T0 here:
+ #0 0x7ffff6efb390 in __interceptor_malloc ../../../../
+ libsanitizer/asan/asan_malloc_linux.cc:86
+ #1 0x4006ea in main /tmp/pointer-compare.c:5
+ #2 0x7ffff6a72a86 in __libc_start_main (/lib64/
+ libc.so.6+0x21a86)
+
+ 0x604000000050 is located 0 bytes inside of 42-byte region
+ [0x604000000050,0x60400000007a)
+ allocated by thread T0 here:
+ #0 0x7ffff6efb390 in __interceptor_malloc ../../../../
+ libsanitizer/asan/asan_malloc_linux.cc:86
+ #1 0x4006f8 in main /tmp/pointer-compare.c:6
+ #2 0x7ffff6a72a86 in __libc_start_main (/lib64/
+ libc.so.6+0x21a86)
+
+ SUMMARY: AddressSanitizer: invalid-pointer-pair /tmp/pointer-
+ compare.c:7 in main
+ * The store merging pass has been enhanced to handle bit-fields and not
+ just constant stores, but also data copying from adjacent memory
+ locations into other adjacent memory locations, including bitwise logical
+ operations on the data. The pass can also handle byte swapping into
+ memory locations.
+ * The undefined behavior sanitizer gained two new options included in -
+ fsanitize=undefined: -fsanitize=builtin which diagnoses at run time
+ invalid arguments to __builtin_clz or __builtin_ctz prefixed builtins,
+ and -fsanitize=pointer-overflow which performs cheap run time tests for
+ pointer wrapping.
New Languages and Language specific improvements
- Compared to GCC 5, the GCC 6 release series includes a much improved
- implementation of the [4]OpenACC 2.0a specification. Highlights are:
- * In addition to single-threaded host-fallback execution, offloading
- is supported for nvptx (Nvidia GPUs) on x86_64 and PowerPC 64-bit
- little-endian GNU/Linux host systems. For nvptx offloading, with
- the OpenACC parallel construct, the execution model allows for an
- arbitrary number of gangs, up to 32 workers, and 32 vectors.
- * Initial support for parallelized execution of OpenACC kernels
- constructs:
- + Parallelization of a kernels region is switched on by
- -fopenacc combined with -O2 or higher.
- + Code is offloaded onto multiple gangs, but executes with just
- one worker, and a vector length of 1.
- + Directives inside a kernels region are not supported.
- + Loops with reductions can be parallelized.
- + Only kernels regions with one loop nest are parallelized.
- + Only the outer-most loop of a loop nest can be parallelized.
- + Loop nests containing sibling loops are not parallelized.
- Typically, using the OpenACC parallel construct gives much better
- performance, compared to the initial support of the OpenACC kernels
- construct.
- * The device_type clause is not supported. The bind and nohost
- clauses are not supported. The host_data directive is not supported
- in Fortran.
- * Nested parallelism (cf. CUDA dynamic parallelism) is not supported.
- * Usage of OpenACC constructs inside multithreaded contexts (such as
- created by OpenMP, or pthread programming) is not supported.
- * If a call to the acc_on_device function has a compile-time constant
- argument, the function call evaluates to a compile-time constant
- value only for C and C++ but not for Fortran.
-
- See the [5]OpenACC and [6]Offloading wiki pages for further
- information.
-
- C family
-
- * Version 4.5 of the [7]OpenMP specification is now supported in the
- C and C++ compilers.
- * The C and C++ compilers now support attributes on enumerators. For
- instance, it is now possible to mark enumerators as deprecated:
-
-enum {
- newval,
- oldval __attribute__ ((deprecated ("too old")))
-};
-
- * Source locations for the C and C++ compilers are now tracked as
- ranges, rather than just points, making it easier to identify the
- subexpression of interest within a complicated expression. For
- example:
-
-test.cc: In function 'int test(int, int, foo, int, int)':
-test.cc:5:16: error: no match for 'operator*' (operand types are 'int' and 'foo'
-)
- return p + q * r * s + t;
- ~~^~~
-
- In addition, there is now initial support for precise diagnostic
- locations within strings:
-
-format-strings.c:3:14: warning: field width specifier '*' expects a matching 'in
-t' argument [-Wformat=]
- printf("%*d");
+Ada
+
+ * For its internal exception handling used on the host for error recovery
+ in the front-end, the compiler now relies on the native exception
+ handling mechanism of the host platform, which should be more efficient
+ than the former mechanism.
+
+BRIG (HSAIL)
+
+In this release cycle, the focus for the BRIGFE was on stabilization and
+performance improvements. Also a couple of completely new features were added.
+ * Improved support for function and module scope group segment variables.
+ PRM specs define function and module scope group segment variables as an
+ experimental feature. However, PRM test suite uses them. Now group
+ segment is handled by separate book keeping of module scope and function
+ (kernel) offsets. Each function has a "frame" in the group segment offset
+ to which is given as an argument, similar to traditional call stack frame
+ handling.
+ * Reduce the number of type conversions due to the untyped HSAIL registers.
+ Instead of always representing the HSAIL's untyped registers as unsigned
+ int, the gccbrig now pre-analyzes the BRIG code and builds the register
+ variables as a type used the most when storing or reading data to/from
+ each register. This reduces the number of total casts which cannot be
+ always optimized away.
+ * Support for BRIG_KIND_NONE directives.
+ * Made -O3 the default optimization level for BRIGFE.
+ * Fixed illegal addresses generated from address expressions which refer
+ only to offset 0.
+ * Fixed a bug with reg+offset addressing on 32b segments. In 'large' mode,
+ the offset is treated as 32bits unless it's in global, read-only or
+ kernarg address space.
+ * Fixed a crash caused sometimes by calls with more than 4 arguments.
+ * Fixed a mis-execution issue with kernels that have both unexpanded ID
+ functions and calls to subfunctions.
+ * Treat HSAIL barrier builtins as setjmp/longjump style functions to avoid
+ illegal optimizations.
+ * Ensure per WI copies of private variables are aligned correctly.
+ * libhsail-rt: Assume the host runtime allocates the work group memory.
+
+C family
+
+ * New command-line options have been added for the C and C++ compilers:
+ o -Wmultistatement-macros warns about unsafe macros expanding to
+ multiple statements used as a body of a statement such as if, else,
+ while, switch, or for.
+ o -Wstringop-truncation warns for calls to bounded string
+ manipulation functions such as strncat, strncpy, and stpncpy that
+ might either truncate the copied string or leave the destination
+ unchanged. For example, the following call to strncat is diagnosed
+ because it appends just three of the four characters from the
+ source string.
+ void append (char *buf, size_t bufsize)
+ {
+ strncat (buf, ".txt", 3);
+ }
+ warning: 'strncat' output truncated copying 3 bytes from a
+ string of length 4 [-Wstringop-truncation]
+ Similarly, in the following example, the call to strncpy specifies
+ the size of the destination buffer as the bound. If the length of
+ the source string is equal to or greater than this size the result
+ of the copy will not be NUL-terminated. Therefore, the call is also
+ diagnosed. To avoid the warning, specify sizeof buf - 1 as the
+ bound and set the last element of the buffer to NUL.
+ void copy (const char *s)
+ {
+ char buf[80];
+ strncpy (buf, s, sizeof buf);
+ …
+ }
+ warning: 'strncpy' specified bound 80 equals destination size
+ [-Wstringop-truncation]
+ The -Wstringop-truncation option is included in -Wall.
+ Note that due to GCC bug 82944, defining strncat, strncpy, or
+ stpncpy as a macro in a system header as some implementations do,
+ suppresses the warning.
+ o -Wif-not-aligned controls warnings issued in response to invalid
+ uses of objects declared with attribute warn_if_not_aligned.
+ The -Wif-not-aligned option is included in -Wall.
+ o -Wmissing-attributes warns when a declaration of a function is
+ missing one or more attributes that a related function is declared
+ with and whose absence may adversely affect the correctness or
+ efficiency of generated code. For example, in C++, the warning is
+ issued when an explicit specialization of a primary template
+ declared with attribute alloc_align, alloc_size, assume_aligned,
+ format, format_arg, malloc, or nonnull is declared without it.
+ Attributes deprecated, error, and warning suppress the warning.
+ The -Wmissing-attributes option is included in -Wall.
+ o -Wpacked-not-aligned warns when a struct or union declared with
+ attribute packed defines a member with an explicitly specified
+ alignment greater than 1. Such a member will wind up under-aligned.
+ For example, a warning will be issued for the definition of struct
+ A in the following:
+ struct __attribute__ ((aligned (8)))
+ S8 { char a[8]; };
+
+ struct __attribute__ ((packed)) A
+ {
+ struct S8 s8;
+ };
+ warning: alignment 1 of 'struct S' is less than 8 [-Wpacked-
+ not-aligned]
+ The -Wpacked-not-aligned option is included in -Wall.
+ o -Wcast-function-type warns when a function pointer is cast to an
+ incompatible function pointer. This warning is enabled by -Wextra.
+ o -Wsizeof-pointer-div warns for suspicious divisions of the size of
+ a pointer by the size of the elements it points to, which looks
+ like the usual way to compute the array size but won't work out
+ correctly with pointers. This warning is enabled by -Wall.
+ o -Wcast-align=strict warns whenever a pointer is cast such that the
+ required alignment of the target is increased. For example, warn if
+ a char * is cast to an int * regardless of the target machine.
+ o -fprofile-abs-path creates absolute path names in the .gcno files.
+ This allows gcov to find the correct sources in projects where
+ compilations occur with different working directories.
+ * -fno-strict-overflow is now mapped to -fwrapv -fwrapv-pointer and signed
+ integer overflow is now undefined by default at all optimization levels.
+ Using -fsanitize=signed-integer-overflow is now the preferred way to
+ audit code, -Wstrict-overflow is deprecated.
+ * The -Warray-bounds option has been improved to detect more instances of
+ out-of-bounds array indices and pointer offsets. For example, negative or
+ excessive indices into flexible array members and string literals are
+ detected.
+ * The -Wrestrict option introduced in GCC 7 has been enhanced to detect
+ many more instances of overlapping accesses to objects via restrict-
+ qualified arguments to standard memory and string manipulation functions
+ such as memcpy and strcpy. For example, the strcpy call in the function
+ below attempts to truncate the string by replacing its initial characters
+ with the last four. However, because the function writes the terminating
+ NUL into a[4], the copies overlap and the call is diagnosed.
+ void f (void)
+ {
+ char a[] = "abcd1234";
+ strcpy (a, a + 4);
+ …
+ }
+ The -Wrestrict option is included in -Wall.
+ * Several optimizer enhancements have enabled improvements to the -Wformat-
+ overflow and -Wformat-truncation options. The warnings detect more
+ instances of buffer overflow and truncation than in GCC 7 and are better
+ at avoiding certain kinds of false positives.
+ * When reporting mismatching argument types at a function call, the C and
+ C++ compilers now underline both the argument and the pertinent parameter
+ in the declaration.
+ $ gcc arg-type-mismatch.cc
+ arg-type-mismatch.cc: In function &#x27;int caller(int, int,
+ float)&#x27;:
+ arg-type-mismatch.cc:5:24: error: invalid conversion from &#x27;int&#x27;
+ to &#x27;const char*&#x27; [-fpermissive]
+ return callee(first, second, third);
+ ^~~~~~
+ arg-type-mismatch.cc:1:40: note: initializing argument 2 of &#x27;int
+ callee(int, const char*, float)&#x27;
+ extern int callee(int one, const char *two, float three);
+ ~~~~~~~~~~~~^~~
+ * When reporting on unrecognized identifiers, the C and C++ compilers will
+ now emit fix-it hints suggesting #include directives for various headers
+ in the C and C++ standard libraries.
+ $ gcc incomplete.c
+ incomplete.c: In function &#x27;test&#x27;:
+ incomplete.c:3:10: error: &#x27;NULL&#x27; undeclared (first use in this
+ function)
+ return NULL;
+ ^~~~
+ incomplete.c:3:10: note: &#x27;NULL&#x27; is defined in header
+ &#x27;<stddef.h>&#x27;; did you forget to &#x27;#include
+ <stddef.h>&#x27;?
+ incomplete.c:1:1:
+ +#include <stddef.h>
+ const char *test(void)
+ incomplete.c:3:10:
+ return NULL;
+ ^~~~
+ incomplete.c:3:10: note: each undeclared identifier is reported only once
+ for each function it appears in
+ $ gcc incomplete.cc
+ incomplete.cc:1:6: error: &#x27;string&#x27; in namespace &#x27;std&#x27;
+ does not name a type
+ std::string s("hello world");
+ ^~~~~~
+ incomplete.cc:1:1: note: &#x27;std::string&#x27; is defined in header
+ &#x27;<string>&#x27;; did you forget to &#x27;#include <string>&#x27;?
+ +#include <string>
+ std::string s("hello world");
+ ^~~
+ * The C and C++ compilers now use more intuitive locations when reporting
+ on missing semicolons, and offer fix-it hints:
+ $ gcc t.c
+ t.c: In function &#x27;test&#x27;:
+ t.c:3:12: error: expected &#x27;;&#x27; before &#x27;}&#x27; token
+ return 42
+ ^
+ ;
+ }
+ ~
+ * When reporting on missing '}' and ')' tokens, the C and C++ compilers
+ will now highlight the corresponding '{' and '(' token, issuing a 'note'
+ if it's on a separate line:
+ $ gcc unclosed.c
+ unclosed.c: In function &#x27;log_when_out_of_range&#x27;:
+ unclosed.c:12:50: error: expected &#x27;)&#x27; before &#x27;{&#x27;
+ token
+ && (temperature < MIN || temperature > MAX) {
+ ^~
+ )
+ unclosed.c:11:6: note: to match this &#x27;(&#x27;
+ if (logging_enabled && check_range ()
^
-
- * Diagnostics can now contain "fix-it hints", which are displayed in
- context underneath the relevant source code. For example:
-
-fixits.c: In function 'bad_deref':
-fixits.c:11:13: error: 'ptr' is a pointer; did you mean to use '->'?
- return ptr.x;
- ^
- ->
-
- * The C and C++ compilers now offer suggestions for misspelled field
- names:
-
-spellcheck-fields.cc:52:13: error: 'struct s' has no member named 'colour'; did
-you mean 'color'?
- return ptr->colour;
- ^~~~~~
-
- * New command-line options have been added for the C and C++
- compilers:
- + -Wshift-negative-value warns about left shifting a negative
- value.
- + -Wshift-overflow warns about left shift overflows. This
- warning is enabled by default. -Wshift-overflow=2 also warns
- about left-shifting 1 into the sign bit.
- + -Wtautological-compare warns if a self-comparison always
- evaluates to true or false. This warning is enabled by -Wall.
- + -Wnull-dereference warns if the compiler detects paths that
- trigger erroneous or undefined behavior due to dereferencing a
- null pointer. This option is only active when
- -fdelete-null-pointer-checks is active, which is enabled by
- optimizations in most targets. The precision of the warnings
- depends on the optimization options used.
- + -Wduplicated-cond warns about duplicated conditions in an
- if-else-if chain.
- + -Wmisleading-indentation warns about places where the
- indentation of the code gives a misleading idea of the block
- structure of the code to a human reader. For example, given
- [8]CVE-2014-1266:
-
-sslKeyExchange.c: In function 'SSLVerifySignedServerKeyExchange':
-sslKeyExchange.c:629:3: warning: this 'if' clause does not guard... [-Wmisleadin
-g-indentation]
- if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0)
- ^~
-sslKeyExchange.c:631:5: note: ...this statement, but the latter is misleadingly
-indented as if it is guarded by the 'if'
- goto fail;
- ^~~~
-
- This warning is enabled by -Wall.
- * The C and C++ compilers now emit saner error messages if
- merge-conflict markers are present in a source file.
-
-test.c:3:1: error: version control conflict marker in file
- <<<<<<< HEAD
- ^~~~~~~
-
- C
-
- * It is possible to disable warnings when an initialized field of a
- structure or a union with side effects is being overridden when
- using designated initializers via a new warning option
- -Woverride-init-side-effects.
- * A new type attribute scalar_storage_order applying to structures
- and unions has been introduced. It specifies the storage order (aka
- endianness) in memory of scalar fields in structures or unions.
-
- C++
-
- * The default mode has been changed to -std=gnu++14.
- * [9]C++ Concepts are now supported when compiling with -fconcepts.
- * -flifetime-dse is more aggressive in dead-store elimination in
- situations where a memory store to a location precedes a
- constructor to the memory location.
- * G++ now supports [10]C++17 fold expressions, u8 character literals,
- extended static_assert, and nested namespace definitions.
- * G++ now allows constant evaluation for all non-type template
- arguments.
- * G++ now supports C++ Transactional Memory when compiling with
- -fgnu-tm.
-
- Runtime Library (libstdc++)
-
- * Extensions to the C++ Library to support mathematical special
- functions (ISO/IEC 29124:2010), thanks to Edward Smith-Rowland.
- * Experimental support for C++17, including the following new
- features:
- + std::uncaught_exceptions function (this is also available for
- -std=gnu++NN modes);
- + new member functions try_emplace and insert_or_assign for
- unique_key maps;
- + non-member functions std::size, std::empty, and std::data for
- accessing containers and arrays;
- + std::invoke;
- + std::shared_mutex;
- + std::void_t and std::bool_constant metaprogramming utilities.
- Thanks to Ville Voutilainen for contributing many of the C++17
- features.
- * An experimental implementation of the File System TS.
- * Experimental support for most features of the second version of the
- Library Fundamentals TS. This includes polymorphic memory resources
- and array support in shared_ptr, thanks to Fan You.
- * Some assertions checked by Debug Mode can now also be enabled by
- _GLIBCXX_ASSERTIONS. The subset of checks enabled by the new macro
- have less run-time overhead than the full _GLIBCXX_DEBUG checks and
- don't affect the library ABI, so can be enabled per-translation
- unit.
- * Timed mutex types are supported on more targets, including Darwin.
- * Improved std::locale support for DragonFly and FreeBSD, thanks to
- John Marino and Andreas Tobler.
-
- Fortran
-
- * The MATMUL intrinsic is now inlined for straightforward cases if
- front-end optimization is active. The maximum size for inlining can
- be set to n with the -finline-matmul-limit=n option and turned off
- with -finline-matmul-llimit=0.
- * The -Wconversion-extra option will warn about REAL constants which
- have excess precision for their kind.
- * The -Winteger-division option has been added, which warns about
- divisions of integer constants which are truncated. This option is
- included in -Wall by default.
+ or highlighting it directly if it's on the same line:
+ $ gcc unclosed-2.c
+ unclosed-2.c: In function &#x27;test&#x27;:
+ unclosed-2.c:8:45: error: expected &#x27;)&#x27; before &#x27;{&#x27;
+ token
+ if (temperature < MIN || temperature > MAX {
+ ~ ^~
+ )
+ They will also emit fix-it hints.
+
+C++
+
+ * The value of the C++11 alignof operator has been corrected to match C
+ _Alignof (minimum alignment) rather than GNU __alignof__ (preferred
+ alignment); on ia32 targets this means that alignof(double) is now 4
+ rather than 8. Code that wants the preferred alignment should use
+ __alignof__ instead.
+ * New command-line options have been added for the C++ compiler to control
+ warnings:
+ o -Wclass-memaccess warns when objects of non-trivial class types are
+ manipulated in potentially unsafe ways by raw memory functions such
+ as memcpy, or realloc. The warning helps detect calls that bypass
+ user-defined constructors or copy-assignment operators, corrupt
+ virtual table pointers, data members of const-qualified types or
+ references, or member pointers. The warning also detects calls that
+ would bypass access controls to data members. For example, a call
+ such as:
+ memcpy (&std::cout, &std::cerr, sizeof std::cout);
+ results in
+ warning: 'void* memcpy(void*, const void*, long unsigned int)'
+ writing to an object of type 'std::ostream' {aka 'class std::
+ basic_ostream<char>'} with no trivial copy-assignment [-Wclass-
+ memaccess]
+ The -Wclass-memaccess option is included in -Wall.
+ * The C++ front end has experimental support for some of the upcoming C++2a
+ draft features with the -std=c++2a or -std=gnu++2a flags, including
+ designated initializers, default member initializers for bit-fields,
+ __VA_OPT__ (except that #__VA_OPT__ is unsupported), lambda [=, this]
+ captures, etc. For a full list of new features, see the_C++_status_page.
+ * When reporting on attempts to access private fields of a class or struct,
+ the C++ compiler will now offer fix-it hints showing how to use an
+ accessor function to get at the field in question, if one exists.
+ $ gcc accessor.cc
+ accessor.cc: In function &#x27;void test(foo*)&#x27;:
+ accessor.cc:12:12: error: &#x27;double foo::m_ratio&#x27; is private
+ within this context
+ if (ptr->m_ratio >= 0.5)
+ ^~~~~~~
+ accessor.cc:7:10: note: declared private here
+ double m_ratio;
+ ^~~~~~~
+ accessor.cc:12:12: note: field &#x27;double foo::m_ratio&#x27; can be
+ accessed via &#x27;double foo::get_ratio() const&#x27;
+ if (ptr->m_ratio >= 0.5)
+ ^~~~~~~
+ get_ratio()
+ * The C++ compiler can now give you a hint if you use a macro before it was
+ defined (e.g. if you mess up the order of your #include directives):
+ $ gcc ordering.cc
+ ordering.cc:2:24: error: expected &#x27;;&#x27; at end of member
+ declaration
+ virtual void clone() const OVERRIDE { }
+ ^~~~~
+ ;
+ ordering.cc:2:30: error: &#x27;OVERRIDE&#x27; does not name a type
+ virtual void clone() const OVERRIDE { }
+ ^~~~~~~~
+ ordering.cc:2:30: note: the macro &#x27;OVERRIDE&#x27; had not yet been
+ defined
+ In file included from ordering.cc:5:
+ c++11-compat.h:2: note: it was later defined here
+ #define OVERRIDE override
+ * The -Wold-style-cast diagnostic can now emit fix-it hints telling you
+ when you can use a static_cast, const_cast, or reinterpret_cast.
+ $ gcc -c old-style-cast-fixits.cc -Wold-style-cast
+ old-style-cast-fixits.cc: In function &#x27;void test(void*)&#x27;:
+ old-style-cast-fixits.cc:5:19: warning: use of old-style cast to
+ &#x27;struct foo*&#x27; [-Wold-style-cast]
+ foo *f = (foo *)ptr;
+ ^~~
+ ----------
+ static_cast<foo *> (ptr)
+ * When reporting on problems within extern "C" linkage specifications, the
+ C++ compiler will now display the location of the start of the extern
+ "C".
+ $ gcc -c extern-c.cc
+ extern-c.cc:3:1: error: template with C linkage
+ template <typename T> void test (void);
+ ^~~~~~~~
+ In file included from extern-c.cc:1:
+ unclosed.h:1:1: note: &#x27;extern "C"&#x27; linkage started here
+ extern "C" {
+ ^~~~~~~~~~
+ extern-c.cc:3:39: error: expected &#x27;}&#x27; at end of input
+ template <typename T> void test (void);
+ ^
+ In file included from extern-c.cc:1:
+ unclosed.h:1:12: note: to match this &#x27;{&#x27;
+ extern "C" {
+ ^
+ * When reporting on mismatching template types, the C++ compiler will now
+ use color to highlight the mismatching parts of the template, and will
+ elide the parameters that are common between two mismatching templates,
+ printing [...] instead:
+ $ gcc templates.cc
+ templates.cc: In function &#x27;void test()&#x27;:
+ templates.cc:9:8: error: could not convert &#x27;vector<double>()&#x27;
+ from &#x27;vector<double>&#x27; to &#x27;vector<int>&#x27;
+ fn_1(vector<double> ());
+ ^~~~~~~~~~~~~~~~~
+ templates.cc:10:8: error: could not convert &#x27;map<int, double>
+ ()&#x27; from &#x27;map<[...],double>&#x27; to &#x27;map<[...],int>&#x27;
+ fn_2(map<int, double>());
+ ^~~~~~~~~~~~~~~~~~
+ Those [...] elided parameters can be seen using -fno-elide-type:
+ $ gcc templates.cc -fno-elide-type
+ templates.cc: In function &#x27;void test()&#x27;:
+ templates.cc:9:8: error: could not convert &#x27;vector<double>()&#x27;
+ from &#x27;vector<double>&#x27; to &#x27;vector<int>&#x27;
+ fn_1(vector<double> ());
+ ^~~~~~~~~~~~~~~~~
+ templates.cc:10:8: error: could not convert &#x27;map<int, double>
+ ()&#x27; from &#x27;map<int,double>&#x27; to &#x27;map<int,int>&#x27;
+ fn_2(map<int, double>());
+ ^~~~~~~~~~~~~~~~~~
+ The C++ compiler has also gained an option -fdiagnostics-show-template-
+ tree which visualizes such mismatching templates in a hierarchical form:
+ $ gcc templates-2.cc -fdiagnostics-show-template-tree
+ templates-2.cc: In function &#x27;void test()&#x27;:
+ templates-2.cc:9:8: error: could not convert &#x27;vector<double>()&#x27;
+ from &#x27;vector<double>&#x27; to &#x27;vector<int>&#x27;
+ vector<
+ [double != int]>
+ fn_1(vector<double> ());
+ ^~~~~~~~~~~~~~~~~
+ templates-2.cc:10:8: error: could not convert &#x27;map<map<int,
+ vector<double> >, vector<double> >()&#x27; from &#x27;map<map<
+ [...],vector<double>>,vector<double>>&#x27; to &#x27;map<map<
+ [...],vector<float>>,vector<float>>&#x27;
+ map<
+ map<
+ [...],
+ vector<
+ [double != float]>>,
+ vector<
+ [double != float]>>
+ fn_2(map<map<int, vector<double>>, vector<double>> ());
+ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ which again works with -fno-elide-type:
+ $ gcc templates-2.cc -fdiagnostics-show-template-tree -fno-elide-type
+ templates-2.cc: In function &#x27;void test()&#x27;:
+ templates-2.cc:9:8: error: could not convert &#x27;vector<double>()&#x27;
+ from &#x27;vector<double>&#x27; to &#x27;vector<int>&#x27;
+ vector<
+ [double != int]>
+ fn_1(vector<double> ());
+ ^~~~~~~~~~~~~~~~~
+ templates-2.cc:10:8: error: could not convert &#x27;map<map<int,
+ vector<double> >, vector<double> >()&#x27; from
+ &#x27;map<map<int,vector<double>>,vector<double>>&#x27; to
+ &#x27;map<map<int,vector<float>>,vector<float>>&#x27;
+ map<
+ map<
+ int,
+ vector<
+ [double != float]>>,
+ vector<
+ [double != float]>>
+ fn_2(map<map<int, vector<double>>, vector<double>> ());
+ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ * Flowing off the end of a non-void function is considered unreachable and
+ may be subject to optimization on that basis. As a result of this change,
+ -Wreturn-type warnings are enabled by default for C++.
+
+Runtime Library (libstdc++)
+
+ * Improved experimental support for C++17, including the following
+ features:
+ o Deduction guides to support class template argument deduction.
+ o std::filesystem implementation.
+ o std::char_traits<char> and std::char_traits<wchar_t> are usable in
+ constant expressions.
+ o std::to_chars and std::from_chars (for integers only, not for
+ floating point types).
+ * Experimental support for C++2a: std::to_address (thanks to Glen
+ Fernandes) and std::endian.
+ * On GNU/Linux, std::random_device::entropy() accesses the kernel's entropy
+ count for the random device, if known (thanks to Xi Ruoyao).
+ * Support for std::experimental::source_location.
+ * AddressSanitizer integration for std::vector, detecting out-of-range
+ accesses to the unused capacity of a vector.
+ * Extensions __gnu_cxx::airy_ai and __gnu_cxx::airy_bi added to the
+ Mathematical Special Functions.
+
+Fortran
+
+ * The main version of libfortran has been changed to 5.
+ * Parameterized derived types, a major feature of Fortran 2003, have been
+ implemented.
+ * The maximum rank for arrays has been increased to 15, conforming to the
+ Fortran 2008 standard.
+ * Transformational intrinsics are now fully supported in initialization
+ expressions.
+ * New flag -fc-prototypes to write C prototypes for BIND(C) procedures and
+ variables.
+ * If -fmax-stack-var-size is honored if given together with -Ofast, -
+ fstack-arrays is no longer set in that case.
+ * New options -fdefault-real-16 and -fdefault-real-10 to control the
+ default kind of REAL variables.
+ * A warning is now issued if an array subscript inside a DO loop could lead
+ to an out-of-bounds-access. The new option -Wdo-subscript, enabled by -
+ Wextra, warns about this even if the compiler can not prove that the code
+ will be executed.
+ * The Fortran front end now attempts to interchange loops if it is deemed
+ profitable. So far, this is restricted to FORALL and DO CONCURRENT
+ statements with multiple indices. This behavior be controlled with the
+ new flag -ffrontend-loop-interchange, which is enabled with optimization
+ by default. The -Wfrontend-loop-interchange option warns about such
+ occurrences.
+ * When an actual argument contains too few elements for a dummy argument,
+ an error is now issued. The -std=legacy option can be used to still
+ compile such code.
+ * The RECL= argument to OPEN and INQUIRE statements now allows 64-bit
+ integers, making records larger than 2GiB possible.
+ * The GFORTRAN_DEFAULT_RECL environment variable no longer has any effect.
+ The record length for preconnected units is now larger than any practical
+ limit, same as for sequential access units opened without an explicit
+ RECL= specifier.
+ * Character variables longer than HUGE(0) elements are now possible on 64-
+ bit targets. Note that this changes the procedure call ABI for all
+ procedures with character arguments on 64-bit targets, as the type of the
+ hidden character length argument has changed. The hidden character length
+ argument is now of type INTEGER(C_SIZE_T).
+
+Go
+
+ * GCC 8 provides a complete implementation of the Go 1.10.1 user packages.
+ * The garbage collector is now fully concurrent. As before, values stored
+ on the stack are scanned conservatively, but value stored in the heap are
+ scanned precisely.
+ * Escape analysis is fully implemented and enabled by default in the Go
+ frontend. This significantly reduces the number of heap allocations by
+ allocating values on the stack instead.
libgccjit
- * The driver code is now run in-process within libgccjit, providing a
- small speed-up of the compilation process.
- * The API has gained entrypoints for
- + [11]timing how long was spent in different parts of code,
- + [12]creating switch statements,
- + [13]allowing unreachable basic blocks in a function, and
- + [14]adding arbitrary command-line options to a compilation.
+The libgccjit API gained four new entry points:
+ * gcc_jit_type_get_vector and
+ * gcc_jit_context_new_rvalue_from_vector for working with vectors,
+ * gcc_jit_type_get_aligned
+ * gcc_jit_function_get_address
+The C code generated by gcc_jit_context_dump_reproducer_to_file is now easier-
+to-read.
New Targets and Target Specific Improvements
- AArch64
-
- * The new command line options -march=native, -mcpu=native and
- -mtune=native are now available on native AArch64 GNU/Linux
- systems. Specifying these options will cause GCC to auto-detect the
- host CPU and rewrite these options to the optimal setting for that
- system. If GCC is unable to detect the host CPU these options have
- no effect.
- * -fpic is now supported by the AArch64 target when generating code
- for the small code model (-mcmodel=small). The size of the global
- offset table (GOT) is limited to 28KiB under the LP64 SysV ABI ,
- and 15KiB under the ILP32 SysV ABI.
- * The AArch64 port now supports target attributes and pragmas. Please
- refer to the [15]documentation for details of available attributes
- and pragmas as well as usage instructions.
- * Link-time optimization across translation units with different
- target-specific options is now supported.
-
- ARM
-
- * Support for revisions of the ARM architecture prior to ARMv4t has
- been deprecated and will be removed in a future GCC release. The
- -mcpu and -mtune values that are deprecated are: arm2, arm250,
- arm3, arm6, arm60, arm600, arm610, arm620, arm7, arm7d, arm7di,
- arm70, arm700, arm700i, arm710, arm720, arm710c, arm7100, arm7500,
- arm7500fe, arm7m, arm7dm, arm7dmi, arm8, arm810, strongarm,
- strongarm110, strongarm1100, strongarm1110, fa526, fa626. The value
- arm7tdmi is still supported. The values of -march that are
- deprecated are: armv2,armv2a,armv3,armv3m,armv4.
- * The ARM port now supports target attributes and pragmas. Please
- refer to the [16]documentation for details of available attributes
- and pragmas as well as usage instructions.
- * Support has been added for the following processors (GCC
- identifiers in parentheses): ARM Cortex-A32 (cortex-a32), ARM
- Cortex-A35 (cortex-a35). The GCC identifiers can be used as
- arguments to the -mcpu or -mtune options, for example:
- -mcpu=cortex-a32 or -mtune=cortex-a35.
-
- Heterogeneous Systems Architecture
-
- * GCC can now generate HSAIL (Heterogeneous System Architecture
- Intermediate Language) for simple OpenMP device constructs if
- configured with --enable-offload-targets=hsa. A new libgomp plugin
- then runs the HSA GPU kernels implementing these constructs on HSA
- capable GPUs via a standard HSA run time.
- If the HSA compilation back end determines it cannot output HSAIL
- for a particular input, it gives a warning by default. These
- warnings can be suppressed with -Wno-hsa. To give a few examples,
- the HSA back end does not implement compilation of code using
- function pointers, automatic allocation of variable sized arrays,
- functions with variadic arguments as well as a number of other less
- common programming constructs.
- When compilation for HSA is enabled, the compiler attempts to
- compile composite OpenMP constructs
-
-#pragma omp target teams distribute parallel for
-
- into parallel HSA GPU kernels.
-
- IA-32/x86-64
-
- * GCC now supports the Intel CPU named Skylake with AVX-512
- extensions through -march=skylake-avx512. The switch enables the
- following ISA extensions: AVX-512F, AVX512VL, AVX-512CD, AVX-512BW,
- AVX-512DQ.
- * Support for new AMD instructions monitorx and mwaitx has been
- added. This includes new intrinsic and built-in support. It is
- enabled through option -mmwaitx. The instructions monitorx and
- mwaitx implement the same functionality as the old monitor and
- mwait instructions. In addition mwaitx adds a configurable timer.
- The timer value is received as third argument and stored in
- register %ebx.
- * x86-64 targets now allow stack realignment from a word-aligned
- stack pointer using the command-line option -mstackrealign or
- __attribute__ ((force_align_arg_pointer)). This allows functions
- compiled with a vector-aligned stack to be invoked from objects
- that keep only word-alignment.
- * Support for address spaces __seg_fs, __seg_gs, and __seg_tls. These
- can be used to access data via the %fs and %gs segments without
- having to resort to inline assembly. Please refer to the
- [17]documentation for usage instructions.
- * Support for AMD Zen (family 17h) processors is now available
- through the -march=znver1 and -mtune=znver1 options.
-
- MeP
-
- * Support for the MeP (mep-elf) architecture has been deprecated and
- will be removed in a future GCC release.
-
- MSP430
-
- * The MSP430 compiler now has the ability to automatically distribute
- code and data between low memory (addresses below 64K) and high
- memory. This only applies to parts that actually have both memory
- regions and only if the linker script for the part has been
- specifically set up to support this feature.
- A new attribute of either can be applied to both functions and
- data, and this tells the compiler to place the object into low
- memory if there is room and into high memory otherwise. Two other
- new attributes - lower and upper - can be used to explicitly state
- that an object should be placed in the specified memory region. If
- there is not enough left in that region the compilation will fail.
- Two new command-line options - -mcode-region=[lower|upper|either]
- and -mdata-region=[lower|upper|either] - can be used to tell the
- compiler what to do with objects that do not have one of these new
- attributes.
-
- PowerPC / PowerPC64 / RS6000
-
- * PowerPC64 now supports IEEE 128-bit floating-point using the
- __float128 data type. In GCC 6, this is NOT enabled by default, but
- you can enable it with -mfloat128. The IEEE 128-bit floating-point
- support requires the use of the VSX instruction set. IEEE 128-bit
- floating-point values are passed and returned as a single vector
- value. The software emulator for IEEE 128-bit floating-point
- support is only built on PowerPC Linux systems where the default
- cpu is at least power7. On future ISA 3.0 systems (power9 and
- later), you will be able to use the -mfloat128-hardware option to
- use the ISA 3.0 instructions that support IEEE 128-bit
- floating-point. An additional type (__ibm128) has been added to
- refer to the IBM extended double type that normally implements long
- double. This will allow for a future transition to implementing
- long double with IEEE 128-bit floating-point.
- * Basic support has been added for POWER9 hardware that will use the
- recently published OpenPOWER ISA 3.0 instructions. The following
- new switches are available:
- + -mcpu=power9: Implement all of the ISA 3.0 instructions
- supported by the compiler.
- + -mtune=power9: In the future, apply tuning for POWER9 systems.
- Currently, POWER8 tunings are used.
- + -mmodulo: Generate code using the ISA 3.0 integer instructions
- (modulus, count trailing zeros, array index support, integer
- multiply/add).
- + -mpower9-fusion: Generate code to suitably fuse instruction
- sequences for a POWER9 system.
- + -mpower9-dform: Generate code to use the new D-form (register
- +offset) memory instructions for the vector registers.
- + -mpower9-vector: Generate code using the new ISA 3.0 vector
- (VSX or Altivec) instructions.
- + -mpower9-minmax: Reserved for future development.
- + -mtoc-fusion: Keep TOC entries together to provide more fusion
- opportunities.
- * New constraints have been added to support IEEE 128-bit
- floating-point and ISA 3.0 instructions:
- + wb: Altivec register if -mpower9-dform is enabled.
- + we: VSX register if -mpower9-vector is enabled for 64-bit code
- generation.
- + wo: VSX register if -mpower9-vector is enabled.
- + wp: Reserved for future use if long double is implemented with
- IEEE 128-bit floating-point instead of IBM extended double.
- + wq: VSX register if -mfloat128 is enabled.
- + wF: Memory operand suitable for POWER9 fusion load/store.
- + wG: Memory operand suitable for TOC fusion memory references.
- + wL: Integer constant identifying the element number mfvsrld
- accesses within a vector.
- * Support has been added for __builtin_cpu_is () and
- __builtin_cpu_supports (), allowing for very fast access to
- AT_PLATFORM, AT_HWCAP, and AT_HWCAP2 values. This requires use of
- glibc 2.23 or later.
- * All hardware transactional memory builtins now correctly behave as
- memory barriers. Programmers can use #ifdef __TM_FENCE__ to
- determine whether their "old" compiler treats the builtins as
- barriers.
- * Split-stack support has been added for gccgo on PowerPC64 for both
- big- and little-endian (but NOT for 32-bit). The gold linker from
- at least binutils 2.25.1 must be available in the PATH when
- configuring and building gccgo to enable split stack. (The
- requirement for binutils 2.25.1 applies to PowerPC64 only.) The
- split-stack feature allows a small initial stack size to be
- allocated for each goroutine, which increases as needed.
- * GCC on PowerPC now supports the standard lround function.
- * A new configuration option ---with-advance-toolchain=at was added
- for PowerPC 64-bit GNU/Linux systems to use the header files,
- library files, and the dynamic linker from a specific Advance
- Toolchain release instead of the default versions that are provided
- by the GNU/Linux distribution. In general, this option is intended
- for the developers of GCC, and it is not intended for general use.
- * The "q", "S", "T", and "t" asm-constraints have been removed.
- * The "b", "B", "m", "M", and "W" format modifiers have been removed.
-
- S/390, System z, IBM z Systems
-
- * Support for the IBM z13 processor has been added. When using the
- -march=z13 option, the compiler will generate code making use of
- the new instructions and registers introduced with the vector
- extension facility. The -mtune=z13 option enables z13 specific
- instruction scheduling without making use of new instructions.
- Compiling code with -march=z13 reduces the default alignment of
- vector types bigger than 8 bytes to 8. This is an ABI change and
- care must be taken when linking modules compiled with different
- arch levels which interchange variables containing vector type
- values. For newly compiled code the GNU linker will emit a warning.
- * The -mzvector option enables a C/C++ language extension. This
- extension provides a new keyword vector which can be used to define
- vector type variables. (Note: This is not available when enforcing
- strict standard compliance e.g. with -std=c99. Either enable GNU
- extensions with e.g. -std=gnu99 or use __vector instead of vector.)
- Additionally a set of overloaded builtins is provided which is
- partially compatible to the PowerPC Altivec builtins. In order to
- make use of these builtins the vecintrin.h header file needs to be
- included.
- * The new command line options -march=native, and -mtune=native are
- now available on native IBM z Systems. Specifying these options
- will cause GCC to auto-detect the host CPU and rewrite these
- options to the optimal setting for that system. If GCC is unable to
- detect the host CPU these options have no effect.
- * The IBM z Systems port now supports target attributes and pragmas.
- Please refer to the [18]documentation for details of available
- attributes and pragmas as well as usage instructions.
- * -fsplit-stack is now supported as part of the IBM z Systems port.
- This feature requires a recent gold linker to be used.
- * Support for the g5 and g6 -march=/-mtune= CPU level switches has
- been deprecated and will be removed in a future GCC release. -m31
- from now on defaults to -march=z900 if not specified otherwise.
- -march=native on a g5/g6 machine will default to -march=z900.
-
- SH
-
- * Support for SH5 / SH64 has been declared obsolete and will be
- removed in future releases.
- * Support for the FDPIC ABI has been added. It can be enabled using
- the new -mfdpic target option and --enable-fdpic configure option.
-
- SPARC
-
- * An ABI bug has been fixed in 64-bit mode. Unfortunately, this
- change will break binary compatibility with earlier releases for
- code it affects, but this should be pretty rare in practice. The
- conditions are: a 16-byte structure containing a double or a 8-byte
- vector in the second half is passed to a subprogram in slot #15,
- for example as 16th parameter if the first 15 ones have at most 8
- bytes. The double or vector was wrongly passed in floating-point
- register %d32 in lieu of on the stack as per the SPARC calling
- conventions.
+AArch64
+
+ * The Armv8.4-A architecture is now supported. It can be used by specifying
+ the -march=armv8.4-a option.
+ * The Dot Product instructions are now supported as an optional extension
+ to the Armv8.2-A architecture and newer and are mandatory on Armv8.4-A.
+ The extension can be used by specifying the +dotprod architecture
+ extension. E.g. -march=armv8.2-a+dotprod.
+ * The Armv8-A +crypto extension has now been split into two extensions for
+ finer grained control:
+ o +aes which contains the Armv8-A AES crytographic instructions.
+ o +sha2 which contains the Armv8-A SHA2 and SHA1 cryptographic
+ instructions.
+ Using +crypto will now enable these two extensions.
+ * New Armv8.4-A FP16 Floating Point Multiplication Variant instructions
+ have been added. These instructions are mandatory in Armv8.4-A but
+ available as an optional extension to Armv8.2-A and Armv8.3-A. The new
+ extension can be used by specifying the +fp16fml architectural extension
+ on Armv8.2-A and Armv8.3-A. On Armv8.4-A the instructions can be enabled
+ by specifying +fp16.
+ * New cryptographic instructions have been added as optional extensions to
+ Armv8.2-A and newer. These instructions can be enabled with:
+ o +sha3 New SHA3 and SHA2 instructions from Armv8.4-A. This implies
+ +sha2.
+ o +sm4 New SM3 and SM4 instructions from Armv8.4-A.
+ * The Scalable Vector Extension (SVE) is now supported as an optional
+ extension to the Armv8.2-A architecture and newer. This support includes
+ automatic vectorization with SVE instructions, but it does not yet
+ include the SVE Arm C Language Extensions (ACLE). It can be enabled by
+ specifying the +sve architecture extension (for example, -march=armv8.2-
+ a+sve). By default, the generated code works with all vector lengths, but
+ it can be made specific to N-bit vectors using -msve-vector-bits=N.
+ * Support has been added for the following processors (GCC identifiers in
+ parentheses):
+ o Arm Cortex-A75 (cortex-a75).
+ o Arm Cortex-A55 (cortex-a55).
+ o Arm Cortex-A55/Cortex-A75 DynamIQ big.LITTLE (cortex-a75.cortex-
+ a55).
+ The GCC identifiers can be used as arguments to the -mcpu or -mtune
+ options, for example: -mcpu=cortex-a75 or -mtune=cortex-a75 or as
+ arguments to the equivalent target attributes and pragmas.
+
+ARC
+
+ * Added support for:
+ o Fast interrupts.
+ o Naked functions.
+ o aux variable attributes.
+ o uncached type qualifier.
+ o Secure functions via sjli instruction.
+ * New exception handling implementation.
+ * Revamped trampoline implementation.
+ * Refactored small data feature implementation, controlled via -G command
+ line option.
+ * New support for reduced register set ARC architecture configurations,
+ controlled via -mrf16 command line option.
+ * Refurbished and improved support for zero overhead loops. Introduced -
+ mlpc-width command line option to control the width of lp_count register.
+
+ARM
+
+ * The -mfpu option now takes a new option setting of -mfpu=auto. When set
+ to this the floating-point and SIMD settings are derived from the
+ settings of the -mcpu or -march options. The internal CPU configurations
+ have been updated with information about the permitted floating-point
+ configurations supported. See the user guide for further information
+ about the extended option syntax for controlling architectural extensions
+ via the -march option. -mfpu=auto is now the default setting unless the
+ compiler has been configured with an explicit --with-fpu option.
+ * The -march and -mcpu options now accept optional extensions to the
+ architecture or CPU option, allowing the user to enable or disable any
+ such extensions supported by that architecture or CPU such as (but not
+ limited to) floating-point and AdvancedSIMD. For example: the option -
+ mcpu=cortex-a53+nofp will generate code for the Cortex-A53 processor with
+ no floating-point support. This, in combination with the new -mfpu=auto
+ option, provides a straightforward way of specifying a valid build target
+ through a single -mcpu or -march option. The -mtune option accepts the
+ same arguments as -mcpu but only the CPU name has an effect on tuning.
+ The architecture extensions do not have any effect. For details of what
+ extensions a particular architecture or CPU option supports please refer
+ to the documentation.
+ * The -mstructure-size-boundary option has been deprecated and will be
+ removed in a future release.
+ * The default link behavior for Armv6 and Armv7-R targets has been changed
+ to produce BE8 format when generating big-endian images. A new flag -
+ mbe32 can be used to force the linker to produce legacy BE32 format
+ images. There is no change of behavior for Armv6-M and other Armv7 or
+ later targets: these already defaulted to BE8 format. This change brings
+ GCC into alignment with other compilers for the ARM architecture.
+ * The Armv8-R architecture is now supported. It can be used by specifying
+ the -march=armv8-r option.
+ * The Armv8.3-A architecture is now supported. It can be used by specifying
+ the -march=armv8.3-a option.
+ * The Armv8.4-A architecture is now supported. It can be used by specifying
+ the -march=armv8.4-a option.
+ * The Dot Product instructions are now supported as an optional extension
+ to the Armv8.2-A architecture and newer and are mandatory on Armv8.4-A.
+ The extension can be used by specifying the +dotprod architecture
+ extension. E.g. -march=armv8.2-a+dotprod.
+ * Support for setting extensions and architectures using the GCC target
+ pragma and attribute has been added. It can be used by specifying #pragma
+ GCC target ("arch=..."), #pragma GCC target ("+extension"), __attribute__
+ ((target("arch=..."))) or __attribute__((target("+extension"))).
+ * New Armv8.4-A FP16 Floating Point Multiplication Variant instructions
+ have been added. These instructions are mandatory in Armv8.4-A but
+ available as an optional extension to Armv8.2-A and Armv8.3-A. The new
+ extension can be used by specifying the +fp16fml architectural extension
+ on Armv8.2-A and Armv8.3-A. On Armv8.4-A the instructions can be enabled
+ by specifying +fp16.
+ * Support has been added for the following processors (GCC identifiers in
+ parentheses):
+ o Arm Cortex-A75 (cortex-a75).
+ o Arm Cortex-A55 (cortex-a55).
+ o Arm Cortex-A55/Cortex-A75 DynamIQ big.LITTLE (cortex-a75.cortex-
+ a55).
+ o Arm Cortex-R52 for Armv8-R (cortex-r52).
+ The GCC identifiers can be used as arguments to the -mcpu or -mtune
+ options, for example: -mcpu=cortex-a75 or -mtune=cortex-r52 or as
+ arguments to the equivalent target attributes and pragmas.
+
+AVR
+
+ * The AVR port now supports the following XMEGA-like devices:
+ ATtiny212, ATtiny214, ATtiny412, ATtiny414, ATtiny416,
+ ATtiny417, ATtiny814, ATtiny816, ATtiny817, ATtiny1614,
+ ATtiny1616, ATtiny1617, ATtiny3214, ATtiny3216, ATtiny3217
+ The new devices are listed under -mmcu=avrxmega3.
+ o These devices see flash memory in the RAM address space, so that
+ features like PROGMEM and __flash are not needed any more (as
+ opposed to other AVR families for which read-only data will be
+ located in RAM except special, non-standard features are used to
+ locate and access such data). This requires that the compiler is
+ used with Binutils 2.29 or newer so that read-only_data_will_be
+ located_in_flash_memory.
+ o A new command-line option -mshort-calls is supported. This option
+ is used internally for multilib selection of the avrxmega3
+ variants. It is not an optimization option. Do not set it by hand.
+ * The compiler now generates efficient_interrupt_service_routine_(ISR)
+ prologues_and_epilogues. This is achieved by using the new AVR_pseudo
+ instruction __gcc_isr which is supported and resolved by the GNU
+ assembler.
+ o As the __gcc_isr pseudo-instruction will be resolved by the
+ assembler, inline assembly is transparent to the process. This
+ means that when inline assembly uses an instruction like INC that
+ clobbers the condition code, then the assembler will detect this
+ and generate an appropriate ISR prologue / epilogue chunk to save /
+ restore SREG as needed.
+ o A new command-line option -mno-gas-isr-prologues disables the
+ generation of the __gcc_isr pseudo instruction. Any non-naked ISR
+ will save and restore SREG, tmp_reg and zero_reg, no matter whether
+ the respective register is clobbered or used.
+ o The feature is turned on per default for all optimization levels
+ except for -O0 and -Og. It is explicitly enabled by means of option
+ -mgas-isr-prologues.
+ o Support has been added for a new AVR_function_attribute no_gccisr.
+ It can be used to disable __gcc_isr pseudo instruction generation
+ for individual ISRs.
+ o This optimization is only available if GCC is configured with GNU
+ Binutils 2.29 or newer; or at least with a version of Binutils that
+ implements feature PR21683.
+ * The compiler no more saves / restores registers in main; the effect is
+ the same as if attribute OS_task was specified for main. This
+ optimization can be switched off by the new command-line option -mno-
+ main-is-OS_task.
+
+IA-32/x86-64
+
+ * The x86 port now supports the naked function attribute.
+ * Better tuning for znver1 and Intel Core based CPUs.
+ * Vectorization cost metrics has been reworked leading to significant
+ improvements on some benchmarks.
+ * GCC now supports the Intel CPU named Cannonlake through -
+ march=cannonlake. The switch enables the AVX512VBMI, AVX512IFMA and SHA
+ ISA extensions.
+ * GCC now supports the Intel CPU named and Icelake through -march=icelake.
+ The switch enables the AVX512VNNI, GFNI, VAES, AVX512VBMI2, VPCLMULQDQ,
+ AVX512BITALG, RDPID and AVX512VPOPCNTDQ ISA extensions.
+ * GCC now supports the Intel Control-flow Enforcement Technology (CET)
+ extension through -mibt, -mshstk, -mcet options. One of these options has
+ to accompany the -fcf-protection option to enable code instrumentation
+ for control-flow protection.
+
+NDS32
+
+ * New command-line options -mext-perf, -mext-perf2, and -mext-string have
+ been added for performance extension instructions.
+
+Nios II
+
+ * The Nios II back end has been improved to generate better-optimized code.
+ Changes include switching to LRA, more accurate cost models, and more
+ compact code for addressing static variables.
+ * New command-line options -mgprel-sec= and -mr0rel-sec= have been added.
+ * The stack-smashing protection options are now enabled on Nios II.
+
+PA-RISC
+
+ * The default call ABI on 32-bit linux has been changed from callee copies
+ to caller copies. This affects objects larger than eight bytes passed by
+ value. The goal is to improve compatibility with x86 and resolve issues
+ with OpenMP.
+ * Other PA-RISC targets are unchanged.
+
+PowerPC / PowerPC64 / RS6000
+
+ * The PowerPC SPE support is split off to a separate powerpcspe port. The
+ separate port is deprecated and might be removed in a future release.
+ * The Paired Single support (as used on some PPC750 CPUs, -mpaired,
+ powerpc*-*-linux*paired*) is deprecated and will be removed in a future
+ release.
+ * The Xilinx floating point support (-mxilinx-fpu, powerpc-xilinx-eabi*) is
+ deprecated and will be removed in a future release.
+ * Support for using big-endian AltiVec intrinsics on a little-endian target
+ (-maltivec=be) is deprecated and will be removed in a future release.
+
+Tile
+
+ * The TILE-Gx port is deprecated and will be removed in a future release.
Operating Systems
- Linux
-
- * Support for the [19]musl C library was added for the AArch64, ARM,
- MicroBlaze, MIPS, MIPS64, PowerPC, PowerPC64, SH, i386, x32 and
- x86_64 targets. It can be selected using the new -mmusl option in
- case musl is not the default libc. GCC defaults to musl libc if it
- is built with a target triplet matching the *-linux-musl* pattern.
-
- RTEMS
-
- * The RTEMS thread model implementation changed. Mutexes now use
- self-contained objects defined in Newlib <sys/lock.h> instead of
- Classic API semaphores. The keys for thread specific data and the
- once function are directly defined via <pthread.h>. Self-contained
- condition variables are provided via Newlib <sys/lock.h>. The RTEMS
- thread model also supports C++11 threads.
- * OpenMP support now uses self-contained objects provided by Newlib
- <sys/lock.h> and offers a significantly better performance compared
- to the POSIX configuration of libgomp. It is possible to configure
- thread pools for each scheduler instance via the environment
- variable GOMP_RTEMS_THREAD_POOLS.
+Windows
- AIX
+ * GCC on Microsoft Windows can now be configured via --enable-mingw-
+ wildcard or --disable-mingw-wildcard to force a specific behavior for GCC
+ itself with regards to supporting the wildcard character. Prior versions
+ of GCC would follow the configuration of the MinGW runtime. This behavior
+ can still be obtained by not using the above options or by using --
+ enable-mingw-wildcard=platform.
- * DWARF debugging support for AIX 7.1 has been enabled as an optional
- debugging format. A more recent Technology Level (TL) and GCC built
- with that level are required for full exploitation of DWARF
- debugging capabilities.
+Improvements for plugin authors
- Solaris
-
- * Solaris 12 is now fully supported. Minimal support had already been
- present in GCC 5.3.
- * Solaris 12 provides a full set of startup files (crt1.o, crti.o,
- crtn.o), which GCC now prefers over its own ones.
- * Position independent executables (PIE) are now supported on Solaris
- 12.
- * Constructor priority is now supported on Solaris 12 with the system
- linker.
- * libvtv has been ported to Solaris 11 and up.
-
- Windows
-
- * The option -mstackrealign is now automatically activated in 32-bit
- mode whenever the use of SSE instructions is requested.
+ * Plugins can now register a callback hook for when comments are
+ encountered by the C and C++ compilers, e.g. allowing for plugins to
+ handle documentation markup in code comments.
+ * The gdbinit support script for debugging GCC now has a break-on-
+ diagnostic command, providing an easy way to trigger a breakpoint
+ whenever a diagnostic is emitted.
+ * The API for creating fix-it hints now supports newlines, and for emitting
+ mutually incompatible fix-it hints for one diagnostic.
Other significant improvements
- * The gcc and g++ driver programs will now provide suggestions for
- misspelled command line options.
-
-$ gcc -static-libfortran test.f95
-gcc: error: unrecognized command line option '-static-libfortran'; did you mean
-'-static-libgfortran'?
-
- * The --enable-default-pie configure option enables generation of PIE
- by default.
-
-
- For questions related to the use of GCC, please consult these web
- pages and the [20]GCC manuals. If that fails, the
- [21]gcc-help@gcc.gnu.org mailing list might help. Comments on these
- web pages and the development of GCC are welcome on our developer
- list at [22]gcc@gcc.gnu.org. All of [23]our lists have public
- archives.
-
- Copyright (C) [24]Free Software Foundation, Inc. Verbatim copying and
- distribution of this entire article is permitted in any medium,
- provided this notice is preserved.
-
- These pages are [25]maintained by the GCC team. Last modified
- 2016-04-25[26].
-
-References
-
- 1. http://gcc.gnu.org/gcc-6/porting_to.html
- 2. http://gcc.gnu.org/onlinedocs/index.html#current
- 3. https://gcc.gnu.org/ml/gcc/2015-08/msg00101.html
- 4. http://www.openacc.org/
- 5. https://gcc.gnu.org/wiki/OpenACC
- 6. https://gcc.gnu.org/wiki/Offloading
- 7. http://openmp.org/wp/openmp-specifications/
- 8. https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-1266
- 9. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4377.pdf
- 10. https://gcc.gnu.org/projects/cxx-status.html#cxx1z.html
- 11. https://gcc.gnu.org/onlinedocs/jit/topics/performance.html
- 12. https://gcc.gnu.org/onlinedocs/jit/topics/functions.html#gcc_jit_block_end_with_switch
- 13. https://gcc.gnu.org/onlinedocs/jit/topics/contexts.html#gcc_jit_context_set_bool_allow_unreachable_blocks
- 14. https://gcc.gnu.org/onlinedocs/jit/topics/contexts.html#gcc_jit_context_add_command_line_option
- 15. https://gcc.gnu.org/onlinedocs/gcc/AArch64-Function-Attributes.html#AArch64-Function-Attributes
- 16. https://gcc.gnu.org/onlinedocs/gcc/ARM-Function-Attributes.html#ARM-Function-Attributes
- 17. https://gcc.gnu.org/onlinedocs/gcc/Named-Address-Spaces.html#Named-Address-Spaces
- 18. https://gcc.gnu.org/onlinedocs/gcc/S_002f390-Function-Attributes.html#S_002f390-Function-Attributes
- 19. http://www.musl-libc.org/
- 20. https://gcc.gnu.org/onlinedocs/
- 21. mailto:gcc-help@gcc.gnu.org
- 22. mailto:gcc@gcc.gnu.org
- 23. https://gcc.gnu.org/lists.html
- 24. http://www.fsf.org/
- 25. https://gcc.gnu.org/about.html
- 26. http://validator.w3.org/check/referer
+ For questions related to the use of GCC, please consult these web
+ pages and the GCC_manuals. If that fails, the gcc-help@gcc.gnu.org
+ mailing list might help. Comments on these web pages and the
+ development of GCC are welcome on our developer list at
+ gcc@gcc.gnu.org. All of our_lists have public archives.
+
+Copyright (C) Free_Software_Foundation,_Inc. Verbatim copying and distribution
+of this entire article is permitted in any medium, provided this notice is
+preserved.
+These pages are maintained_by_the_GCC_team. Last modified 2018-04-27.