diff options
author | Igor Pashev <pashev.igor@gmail.com> | 2019-11-18 15:53:29 +0300 |
---|---|---|
committer | Igor Pashev <pashev.igor@gmail.com> | 2019-11-18 15:53:29 +0300 |
commit | 8f6c4b0033c72f8ac14694c419a99458339dd6a9 (patch) | |
tree | 06c106e622a58100aa85a381b9b65d222b076df4 /debian/NEWS.gcc | |
parent | 42156b5190f4fa150e1fab6777eb81e69d4db8c9 (diff) | |
download | gcc-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.gcc | 1580 |
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 'int caller(int, int, + float)': + arg-type-mismatch.cc:5:24: error: invalid conversion from 'int' + to 'const char*' [-fpermissive] + return callee(first, second, third); + ^~~~~~ + arg-type-mismatch.cc:1:40: note: initializing argument 2 of 'int + callee(int, const char*, float)' + 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 'test': + incomplete.c:3:10: error: 'NULL' undeclared (first use in this + function) + return NULL; + ^~~~ + incomplete.c:3:10: note: 'NULL' is defined in header + '<stddef.h>'; did you forget to '#include + <stddef.h>'? + 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: 'string' in namespace 'std' + does not name a type + std::string s("hello world"); + ^~~~~~ + incomplete.cc:1:1: note: 'std::string' is defined in header + '<string>'; did you forget to '#include <string>'? + +#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 'test': + t.c:3:12: error: expected ';' before '}' 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 'log_when_out_of_range': + unclosed.c:12:50: error: expected ')' before '{' + token + && (temperature < MIN || temperature > MAX) { + ^~ + ) + unclosed.c:11:6: note: to match this '(' + 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 'test': + unclosed-2.c:8:45: error: expected ')' before '{' + 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 'void test(foo*)': + accessor.cc:12:12: error: 'double foo::m_ratio' 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 'double foo::m_ratio' can be + accessed via 'double foo::get_ratio() const' + 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 ';' at end of member + declaration + virtual void clone() const OVERRIDE { } + ^~~~~ + ; + ordering.cc:2:30: error: 'OVERRIDE' does not name a type + virtual void clone() const OVERRIDE { } + ^~~~~~~~ + ordering.cc:2:30: note: the macro 'OVERRIDE' 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 'void test(void*)': + old-style-cast-fixits.cc:5:19: warning: use of old-style cast to + 'struct foo*' [-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: 'extern "C"' linkage started here + extern "C" { + ^~~~~~~~~~ + extern-c.cc:3:39: error: expected '}' 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 '{' + 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 'void test()': + templates.cc:9:8: error: could not convert 'vector<double>()' + from 'vector<double>' to 'vector<int>' + fn_1(vector<double> ()); + ^~~~~~~~~~~~~~~~~ + templates.cc:10:8: error: could not convert 'map<int, double> + ()' from 'map<[...],double>' to 'map<[...],int>' + 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 'void test()': + templates.cc:9:8: error: could not convert 'vector<double>()' + from 'vector<double>' to 'vector<int>' + fn_1(vector<double> ()); + ^~~~~~~~~~~~~~~~~ + templates.cc:10:8: error: could not convert 'map<int, double> + ()' from 'map<int,double>' to 'map<int,int>' + 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 'void test()': + templates-2.cc:9:8: error: could not convert 'vector<double>()' + from 'vector<double>' to 'vector<int>' + vector< + [double != int]> + fn_1(vector<double> ()); + ^~~~~~~~~~~~~~~~~ + templates-2.cc:10:8: error: could not convert 'map<map<int, + vector<double> >, vector<double> >()' from 'map<map< + [...],vector<double>>,vector<double>>' to 'map<map< + [...],vector<float>>,vector<float>>' + 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 'void test()': + templates-2.cc:9:8: error: could not convert 'vector<double>()' + from 'vector<double>' to 'vector<int>' + vector< + [double != int]> + fn_1(vector<double> ()); + ^~~~~~~~~~~~~~~~~ + templates-2.cc:10:8: error: could not convert 'map<map<int, + vector<double> >, vector<double> >()' from + 'map<map<int,vector<double>>,vector<double>>' to + 'map<map<int,vector<float>>,vector<float>>' + 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. |