No dia 3 de maio, foi liberada a primeira versão pública do GCC 9: GCC 9.1.
Ela contém muitas melhorias e adições significativas em comparação com a oitava
versão.
Mudanças gerais
Opções
- Comandos que aceitam tamanhos agora suportam valores de 64 bits e sufixos para indicar tamanho;
- Foi adicionada a opção -flive-patching, para controlar otimizações potencialmente destrutivas para substituição de código em tempo de execução;
- Adicionada a opção —completion para suporte a autocompletar no shell de comando;
- O diagnóstico do compilador agora inclui números de linha (-fno-diagnostics-show-line-numbers) e
informação sobre tipos (fno-diagnostics-show-labels); - Foi adicionada a opção -fdiagnostics-format=json para saída de diagnósticos em formato JSON;
- Opções para especificação de alinhamento (-falign-functions, por exemplo) agora podem aceitar um par de variantes de alinhamento;
- Foram adicionadas opções para filtrar a lista de arquivos (-fprofile-filter-files, -fprofile-exclude-files), que são instrumentados pelo profiler;
- O AddressSanitizer agora utiliza um alinhamento mais compacto para capturar acessos inválidos a variáveis na pilha;
- Várias melhorias na saída -fopt-info;
- Foi adicionada a opção -fsave-optimization-record para salvar o relatório de otimizações em um arquivo;
- Foi adicionada a opção -fipa-stack-alignment e -fipa-reference-addressable.
Novas funções embutidas
Novo atributo
- copy.
Outro
Várias melhorias na geração de código relacionadas a:
- geração de estruturas switch;
- otimizações interprocedurais;
- otimização baseada em informações de perfil;
- otimização em tempo de link (LTO);
Além disso, o formato interno do gcov agora é JSON, e a nova opção —use-hotness-colors ativa o colorido das linhas de código dependendo da frequência de uso.
Línguas
Qualidade e completude da implementação OpenACC em linguagens C, C++ e Fortran continuam a melhorar.
Linguagens semelhantes ao C
- Implementado suporte parcial ao OpenMP 5.0;
- Adicionada a função __builtin_convertvector;
- Adicionado aviso -Waddress-of-packed-member;
- Melhorias em vários avisos existentes;
- O texto de erro ao passar um número errado de argumentos para um macro agora inclui a declaração do próprio macro;
- Melhorias nas sugestões de correção de erros de digitação.
C
- Suporte a _Static_assert com um argumento para -std=c2x (o futuro padrão C);
- Novo aviso -Wabsolute-value, que captura o tipo de argumento incorreto para funções como abs().
C++
- Novos avisos: -Wdeprecated-copy,
-Winit-list-lifetime,
-Wredundant-move,
-Wpessimizing-move,
-Wclass-conversion; - Estamos trabalhando na implementação de novas funcionalidades do futuro padrão C++ 2a;
- O frontend agora mantém informações mais precisas sobre vários elementos do código-fonte, permitindo uma exibição mais detalhada nas diagnósticas;
- As diagnósticas foram aprimoradas para funções sobrecarregadas, operadores binários, chamadas de função e strings que definem formato;
- Correções automáticas suportadas por alguns ambientes de desenvolvimento foram adicionadas para vários erros populares (falta de parênteses, namespaces, erros de digitação, etc.).
libstdc++
- A implementação do C++17 não é mais experimental;
- Algoritmos paralelos, <execution>, <memory_resource>, e <filesystem> não requer mais -lstdc++fs;
- O suporte experimental ao C++ 2a foi aprimorado (<bit>, <version>, std::bind_front, etc.);
- Suporte para abertura de streams de arquivos no Windows, cujos caminhos contêm caracteres fora do char;
- Suporte inicial ao <filesystem> no Windows;
- Suporte inicial ao Networking TS.
D
A linguagem D versão 2.076 está incluída no GCC.
Fortran
- Suporte total para entrada/saída assíncrona;
- Implementado o argumento BACK para MINLOC e MAXLOC;
- Implementadas as funções FINDLOC e IS_CONTIGUOUS;
- Implementada a sintaxe de acesso a partes compostas de números complexos: c%re e c%im;
- Implementada a sintaxe str%len e a%kind;
- Implementados descritores C e o cabeçalho ISO_Fortran_binding.h;
- Os requisitos para o resultado das funções MAX e MIN foram reduzidos quando um dos argumentos é NaN;
- Foi adicionada a opção -fdec-include;
- Adicionada a diretiva BUILTIN.
libgccjit
- Adicionada a função gcc_jit_context_add_driver_option.
Outro
Várias mudanças específicas de arquitetura e sistema operacional.
Fonte: linux.org.ru

