Релиз набора компиляторов GCC 11

После года разработки опубликован релиз свободного набора компиляторов GCC 11.1, первый значительный выпуск в новой ветке GCC 11.x. В соответствии с новой схемой нумерации выпусков, версия 11.0 использовалась в процессе разработки, а незадолго до выхода GCC 11.1 уже ответвилась ветка GCC 12.0, на базе которой будет сформирован следующий значительный релиз GCC 12.1.

GCC 11.1 примечателен переходом на использование по умолчанию формата отладочных файлов DWARF 5, включением по умолчанию стандарта C++17 (»-std=gnu++17»), значительным улучшением поддержки стандарта C++20, экспериментальной поддержкой C++23, улучшениями, связанными с будущим стандартом языка Си (C2x), новыми оптимизациями производительности.

Основные изменения:

  • Режим по умолчанию для языка C++ переключён на использование стандарта C++17 (-std=gnu++17) вместо ранее предлагавшегося C++14. Возможно выборочное отключение нового поведения C++17 при обработке шаблонов, в которых в качестве параметра используются другие шаблоны (-fno-new-ttp-matching).

  • Добавлена поддержка аппаратного ускорения работы инструмента AddressSanitizer, позволяющего определить факты обращения к освобождённым областям памяти, выхода за пределы границ выделенного буфера и некоторые другие типы ошибок при работе с памятью. Аппаратное ускорение пока доступно только для архитектуры AArch64 и сосредоточено на использование при компиляции ядра Linux. Для включения аппаратного ускорения AddressSanitizer при сборке компонентов пространства пользователя добавлен флаг »-fsanitize=hwaddress», а ядра — »-fsanitize=kernel-hwaddress».

  • При генерации отладочной информации по умолчанию задействован формат DWARF 5, по сравнению с прошлыми версиями позволяющий генерировать на 25% более компактные отладочные данные. Для полной поддержки DWARF 5 требуется binutils как минимум версии 2.35.2. В отладочных инструментах формат DWARF 5 поддерживается начиная с GDB 8.0, valgrind 3.17.0, elfutils 0.172 и dwz 0.14. Для генерации отладочных файлов с использованием других версий DWARF можно использовать опции »-gdwarf-2»,»-gdwarf-3» и »-gdwarf-4».
  • Повышены требования к компиляторам, которые можно использовать для сборки GCC. Компилятор теперь должен поддерживать стандарт C++11 (ранее требовался C++98), т.е. если для сборки GCC 10 достаточно было наличия GCC 3.4, для для сборки GCC 11 теперь требуется как минимум GCC 4.8.

  • Изменено наименование и размещение файлов для сохранения дампов, временных файлов и дополнительной информации, необходимой для проведения LTO-оптимизации. Подобные файлы теперь всегда сохраняются в текущем каталоге, если путь явно не изменён через параметры »-dumpbase»,»-dumpdir» и »-save-temps=*».

  • Объявлена устаревшей и скоро будет удалена поддержка бинарного формата BRIG, предназначенного для использования с языком HSAIL (Heterogeneous System Architecture Intermediate Language).

  • Расширены возможности режима ThreadSanitizer (-fsanitize=thread), предназначенного для обнаружения состояния гонки при совместном доступе к одним и тем же данным из различных нитей многопоточного приложения. В новом выпуске добавлена поддержка альтернативных runtime и окружений, а также поддержка отладочного инструмента KCSAN (Kernel Concurrency Sanitizer), предназначенного для динамического выявления состояний гонки внутри ядра Linux. Добавлены новые опции »--param tsan-distinguish-volatile» и »--param tsan-instrument-func-entry-exit».

  • Номера столбцов в диагностических сообщениях теперь отражают не счётчик байт от начала строки, а действительно номера столбцов, учитывающих многобайтовые символы и символы занимающие несколько позиций в строке (например, символ

    © OpenNet