El 3 de mayo se lanzó la primera versión pública de la novena versión de GCC: GCC 9.1.
Contiene numerosas mejoras y adiciones significativas en comparación con la octava
versión.
Cambios generales
Opciones
- Los comandos que aceptan tamaño ahora admiten valores de 64 bits y sufijos para indicar el tamaño;
- Se ha añadido la opción -flive-patching, para gestionar optimizaciones que podrían ser destructivas para la sustitución dinámica de código;
- Se añadió la opción —completion para soportar la autocompletación en la terminal;
- Los diagnósticos del compilador ahora incluyen números de línea (-fno-diagnostics-show-line-numbers) y
información sobre tipos (-fno-diagnostics-show-labels); - Se ha añadido la opción -fdiagnostics-format=json para la salida de diagnósticos en formato JSON;
- Opciones para especificar alineación (-falign-functions, por ejemplo) ahora pueden aceptar un par de opciones de alineación;
- Se añadieron opciones para filtrar la lista de archivos (-fprofile-filter-files, -fprofile-exclude-files), que serán instrumentados por el perfilador;
- AddressSanitizer ahora utiliza un alineamiento más compacto para detectar accesos incorrectos a variables en la pila;
- Numerosas mejoras en la salida -fopt-info;
- Se ha añadido la opción -fsave-optimization-record para guardar el informe de optimización en un archivo;
- Se ha añadido la opción -fipa-stack-alignment y -fipa-reference-addressable.
Nuevas funciones incorporadas
Un nuevo atributo
- copy.
Otro
Numerosas mejoras en la generación de código relacionadas con:
- generación de estructuras switch;
- optimización entre procedimientos;
- optimización basada en información de perfilado;
- optimización en el paso de enlace (LTO);
Además, el formato interno de gcov ahora es JSON, y la nueva opción —use-hotness-colors incluye colorear líneas de código según la frecuencia de uso.
Lenguajes
Calidad y completitud de la implementación OpenACC en los lenguajes C, C++ y Fortran sigue mejorando.
Lenguajes similares a C
- Se implementó soporte parcial para OpenMP 5.0;
- Se agregó la función __builtin_convertvector;
- Se añadió una advertencia -Waddress-of-packed-member;
- Mejoras en varias advertencias existentes;
- El texto del error al pasar un número incorrecto de argumentos a un macro ahora incluye la declaración del propio macro;
- Mejoras en las sugerencias de corrección ortográfica.
C
- Soporte para _Static_assert con un argumento para -std=c2x (futuro estándar de C);
- Una nueva advertencia -Wabsolute-value, que detecta un tipo de argumento incorrecto para funciones como abs().
C++
- Nuevas advertencias: -Wdeprecated-copy,
-Winit-list-lifetime,
-Wredundant-move,
-Wpessimizing-move,
-Wclass-conversion; - Se está trabajando en la implementación de nuevas funcionalidades del futuro estándar C++ 2a;
- El frontend ahora conserva información más precisa sobre una serie de elementos del código fuente, lo que permite mostrar información más detallada en los diagnósticos;
- Se han mejorado los diagnósticos para funciones sobrecargadas, operadores binarios, llamadas a funciones y cadenas de formato;
- Se han agregado correcciones automáticas soportadas por algunos entornos de desarrollo para una serie de errores comunes (paréntesis faltantes, espacios de nombres, errores tipográficos, etc.).
libstdc++
- La implementación de C++17 ya no es experimental;
- Se han agregado algoritmos paralelos, <execution>, <memory_resource>, y <filesystem> ya no requiere -lstdc++fs;
- Se ha mejorado el soporte experimental para C++ 2a (<bit>, <version>, std::bind_front, etc.);
- Soporte para abrir flujos de archivos en Windows cuyos caminos contienen caracteres fuera de char;
- Soporte inicial para <filesystem> en Windows;
- Soporte inicial para Networking TS.
ataques
El lenguaje D versión 2.076 se incluye en GCC.
Fortran
- Soporte completo para entrada/salida asíncrona;
- Se ha implementado el argumento BACK para MINLOC y MAXLOC;
- Se han implementado las funciones FINDLOC e IS_CONTIGUOUS;
- Se ha implementado la sintaxis de acceso a las partes complejas de números complejos: c%re y c%im;
- Se ha implementado la sintaxis str%len y a%kind;
- Se han implementado descriptores C y el encabezado ISO_Fortran_binding.h;
- Se han flexibilizado los requisitos sobre el resultado de las funciones MAX y MIN cuando uno de los argumentos es NaN;
- Se ha añadido la opción -fdec-include;
- Se ha añadido la directiva BUILTIN.
libgccjit
- Se agregó la función gcc_jit_context_add_driver_option.
Otro
Una serie de cambios específicos de arquitectura y sistema operativo.
Fuente: linux.org.ru

