GCC 11.1 has already been released, these are its most important news and changes

After a year of development, GCC 11.1 compiler suite new version released, the first significant release in the new GCC 11.x branch. Under the new version numbering scheme, version 11.0 was used during development, and shortly before the release of GCC 11.1, a branch of GCC 12.0 had already been forked to form the next major version of GCC 12.1.

GCC 11.1 stands out for the transition to the default debug file format DWARF 5, the default inclusion of the C ++ 17 standard ("-std = gnu ++ 17"), significant improvements in compatibility with the C ++ 20 standard, experimental support for C ++ 23, improvements related to the future standard of the C language (C2x), new performance optimizations.

GCC 11.1 Main New Features

The default mode for the C ++ language is changed to use the C ++ 17 standard, instead of the previously proposed C ++ 14. It is possible to selectively disable the new C ++ 17 behavior when processing templates that use other templates as a parameter (-fno-new-ttp-matching).

Added support for hardware acceleration of the AddressSanitizer tool, which allows you to determine the facts of accessing freed memory areas, exceeding the limits of the allocated buffer, and some other types of errors when working with memory. Hardware acceleration is currently only available for the AArch64 architecture and focuses on its use when compiling the Linux kernel.

Another novelty that is presented are the optimizations and improvements between procedures, as a new IPA-modref pass was added (-fipa-modref) to track side effects in function calls and improve analysis accuracy. Besides also a improved implementation of the IPA-ICF pass (-fipa-icf), which reduces compilation memory consumption and increases the number of unified functions for which identical blocks of code are merged.

El profile-driven optimization engine (PGO), improved "-fprofile-values" mode by keeping track of more parameters for indirect calls.

As well Continued implementation of the OpenMP 5.0 standard is highlighted (Open Multi-Processing), in which added initial support for assignment directive and the ability to use non-uniform loops in OpenMP builds. The OMP_TARGET_OFFLOAD environment variable is now supported.

The implementation of the OpenACC 2.6 parallel programming specification provided for the C, C ++ and Fortran languages, which defines tools for offloading operations to GPUs and specialized processors such as NVIDIA PTX, has been improved.

For the languages ​​of the C family, a new attribute "no_stack_protector" has been implemented, designed to mark functions for which stack protection should not be enabled ("-fstack-protector"). The "malloc" attribute has been extended with support for identifying pairs of calls to allocate and free memory, which is used in the static parser to detect typical memory errors (memory leaks, usage after free, double calls to free function, etc.) and compiler warnings "-Wmismatched-dealloc", "-Wmismatched- new-delete "and" -Wfree-nonheap-object "reporting inconsistent deallocation and deallocation operations.

When generating debugging information, the DWARF 5 format is used by default, which, compared to previous versions, allows the generation of debugging data that is 25% more compact. Full DWARF 5 support requires binutils at least version 2.35.2.

Enhanced ThreadSanitizer mode capabilities (-fsanitize = thread), since yese adds support for alternative runtimes and environments, as well as support for the Kernel Concurrency Sanitizer (KCSAN) debugging tool to dynamically detect race conditions within the Linux kernel. New options "–param tsan-distinguish-volatile" and "–param tsan-instrument-func-entry-exit" have been added.

The vectorizer provides the accounting of all the content of the function and the additional processing of the capabilities associated with the intersections and references to previous blocks in the control flow chart (CFG).

The optimizer has the ability to convert a series of conditional operations into a change expression, in which the same variable is compared. In the future, the change expression can be encoded using bit test instructions (to control this conversion, the "-fbit-tests" option has been added).

For C ++, a part of the changes and innovations proposed in the C ++ 20 standard have been implemented, including the virtual functions "consteval virtual", pseudo-destroyers for terminating the life cycle of objects, using the enum class and calculating the size of an array in the expression "new".

If you want to know more about it, you can check the details in the following link. 


Leave a Comment

Your email address will not be published. Required fields are marked with *

*

*

  1. Responsible for the data: Miguel Ángel Gatón
  2. Purpose of the data: Control SPAM, comment management.
  3. Legitimation: Your consent
  4. Communication of the data: The data will not be communicated to third parties except by legal obligation.
  5. Data storage: Database hosted by Occentus Networks (EU)
  6. Rights: At any time you can limit, recover and delete your information.