lcc - компилятор “Эльбрус” lcc [options] [files] lcc - компилятор с языка C l++ - компилятор с языка C++ lfortran - компилятор с языка Fortran

Опции печати помощи
Печатать этот текст Печатать этот текст в форматированном виде для автоматической обработки

Опции управления процессом компиляции
Компилировать или ассемблировать исходные файлы, но не линковать. Стадия линковки просто не выполняется. Конечный вывод происходит в форме объектного файла для каждого исходного файла. По умолчанию, имя объектного файла делается из имени исходного файла заменой суффикса “.c”, “.i”, “.s”, и.т.д. на “.o”. При подаче на вход не распознанного файла (включая случаи, когда подается не распознанный и распознанный файл вместе) компилятор выдает следующее сообщение об ошибке: “lcc: ошибка: <имя не распознанного файла>: файл неизвестного типа передан для компиляции”. При этом объектный файл не создается. Остановиться после собственно компиляции; не ассемблировать. Вывод производится в форме файла с ассемблерным кодом для каждого не ассемблерного входного файла. По умолчанию, имя файла с ассемблерным кодом делается из имени исходного файла заменой суффикса “.c”, “.i”, и.т.д. на “.s”. При подаче на вход не распознанного файла (включая случаи, когда подается не распознанный и распознанный файл вместе) компилятор выдает следующее сообщение об ошибке: “lcc: ошибка: <имя не распознанного файла>: файл неизвестного типа передан для компиляции”. При этом файл с ассемблерным кодом не создается. Поместить вывод в файл <file>. Эта опция применяется вне зависимости от вида порождаемого файла, есть ли это исполняемый файл, объектный файл, ассемблерный файл или препроцессированный C код. Поскольку указывается только один выходной файл, нет смысла использовать -o при компиляции более чем одного входного файла, если вы не порождаете на выходе исполняемый файл. Если -o не указано, по умолчанию исполняемый файл помещается в “a.out”, объектный файл для “исходный.суффикс” - в “исходный.o”, его ассемблерный код в “исходный.s” и все препроцессированные C файлы - в стандартный вывод. Печатать (в стандартный вывод ошибок) команды, выполняемые для запуска стадий компиляции. Также печатать номер версии управляющей программы компилятора, препроцессора и самого компилятора. Выводить только строки запуска компонент Создавать временные файлы в текущей директории и не удалять их Установить директорию для временных файлов Подключить потоковые библиотеки и макросы Подавлять все предупреждения, не относящиеся к исходному тексту программы

Опции режима компиляции целевой архитектуры
Настроить параметры планирования под процессор <cpu> Формировать код для процессора <cpu>. Параметр опции может принимать следующие значения: v8, v9, ultrasparc, ultrasparc3, r1000, r2000, r2000+, native. Значения параметра v8, v9 и ultrasparc трактуются как ultrasparc3. Значение параметра native соответствует режиму компилятора по умолчанию в отношении настройки target-процессора Компилировать в режиме 32 бит Компилировать в режиме 64 бит Разрешить обращения в память размером 8 байт по адресам, выровненным на 4 байта В настоящем sparc'е такой режим включен по умолчанию. Невыровненные обращения в память реально исполняются через прерывание операционной системы (т.е. работают очень медленно). Включенный режим по умолчанию неудобен для программиста там, что на этапе разработки программы он может не увидеть, что программа работает по невыровненным адресам, и, соотвественно, не увидеть, что программа работает не эффективно. Невыровненные обращения используются крайне редко и в большинстве случаев говорят о наличии ошибки в исходнике программы. Именно поэтому в lcc такой режим вынесен под опцию

Опции управления языковыми настройками
Использовать стандарт C/C++/Fortran <standard> В режиме языка C параметр может принимать значения: c89, gnu89, c90, iso9899:1990, iso9899:199409, gnu90, c9x, gnu9x, c99, iso9899:1999, gnu99, c1x, gnu1x, c11, iso9899:2011, gnu11, c17, c18, iso9899:2017, iso9899:2018, gnu17, gnu18. По умолчанию установлен режим -std=gnu18 В режиме языка C++ параметр может принимать значения: c++98, gnu++98, c++03, gnu++03, c++0x, gnu++0x, c++11, gnu++11, c++1y, gnu++1y, c++14, gnu++14, c++1z, gnu++1z, c++17, gnu++17, c++2a, gnu++2a, c++20, gnu++20. По умолчанию установлен режим -std=gnu++14. Для языков C++17 и C++20 поддержка экспериментальная В режиме языка Fortran параметр может принимать значения: f95, f2003, f2008, gnu, legacy, f2008ts. По умолчанию установлен режим -std=gnu В режиме языка C эквивалентно -std=c89, в режиме языка C++ эквивалентно -std=c++98 Настроить lcc/l++ на совместимость с gcc версии <version> в отношении входного языка Поддерживать директивы OpenMP Включить поддержку SIMD директив OpenMP. Другие директивы игнорируются

Опции управления языковыми настройками C/C++
Разрешать устаревшие конструкции C++ Некоторые ошибки по части устаревших конструкций C++ трактовать, как предупреждения Включить (выключить) поддержку обработки исключительных ситуаций Эквивалентно -fexceptions (-fno-exceptions) В режиме -fexceptions включить (выключить) построение информации о раскрутке стека Эквивалентно -funwind-tables (-fno-unwind-tables) Изменить название personality-функции Включить (выключить) поддержку Run-Time Type Information Ограничивать (не ограничивать) видимость переменных, объявленных внутри блока инициализации for, самим циклом for В режиме C++ поддерживать (не поддерживать) ключевые слова and, and_eq, bitand, bitor, compl, not, not_eq, or, or_eq, xor, xor_eq Установить допустимую глубину вложенности шаблонов C++ Установить глубину выдачи стека инстанциирования шаблонов C++ в случае выдачи ошибки в исходнике. Значение 0 соответствует неограниченной выдаче Установить допустимую глубину рекурсии constexpr-выражений C++ Игнорируется Установить допустимую вычислительную сложность constexpr-выражений C++, измеряется в количестве операций вызовов и количестве итераций циклов Опция используется для компиляции библиотеки поддержки C++ времени исполнения Опция используется для компиляции библиотеки поддержки libgcc Каждая машина имеет настройки по умолчанию - каким должен быть char: таким, как unsigned char или таким, как signed char. В идеале, переносимая программа всегда должна явно использовать unsigned char или signed char, когда она зависит от знаковости объекта. Но многие программы были написаны с использованием простого char в предположении, что он будет либо знаковым, либо беззнаковым, в зависимости от машины, для которой они были написаны. Эта опция и ей противоположная позволяют вам заставить такую программу работать при противоположном умолчании. Тип char всегда отличен и от signed char, и от unsigned char (и это критично для C++), хотя его поведение всегда такое же, как у одного из этих двух типов. В режиме C99 и выше трактовать модификатор inline в терминах языка GNU C89 Разрешать неявное преобразование типов для векторных типов с одинаковымы размерами, но разными базовыми типами В режиме препроцессирования использовать старый стиль препроцессирования Поддерживаются трехсимвольные последовательности ANSI C. Опция -ansi включает -trigraphs В режиме C++ с использованием gnu-расширений не рассматривать typeof как ключевое слово В режиме C++ включить (выключить) встроенные описания void operator delete (void *, std::size_t) noexcept; void operator delete[] (void *, std::size_t) noexcept; Эти описания появились в стандарте C++14, где они поддерживаются по умолчанию, но по опции поддержку можно включить и при использовании более ранних стандартов Эти описания могут быть полезными для пользовательских replacement deallocation функций, которые, например, работают быстрее, если известен размер объекта В режиме C++ включить (выключить) поддержку over-aligned allocation. Это свойство появилось в стандарте C++17, где оно поддерживается по умолчанию, но по опции поддержку можно включить и при использовании более ранних стандартов Обычные операторы new выделяют память по адресам, кратным выравниванию типа std::maxalign_t. Если нужно выделить память под тип, который выровнен ещё больше (например, выравнивание типа задано с помощью спецификатора alignof), то компилятор построит вызов перегруженного (placement) оператора new, у которого вторым аргументом идёт величина выравнивания В режиме C++ включить (выключить) поддержку базового типа char8_t. Это свойство появилось в стандарте C++20, где оно поддерживается по умолчанию, но по опции поддержку можно включить и при использовании более ранних стандартов В режиме C/C++ включить (выключить) поддержку universal character names в идентификаторах

Опции управления языковыми настройками Фортрана
Распределять автоматические массивы неизвестного размера в стеке (в куче) В режиме -fstack-arrays массивы неизвестного размера (Variable Length Arrays - VLA) размещаются в стеке, в режиме -fno-stack-arrays - в куче. По умолчанию для языков C/C++ включен режим -fstack-arrays, для Фортрана -fno-stack-arrays В режиме Фортрана 77 указать, что программа не соблюдает стандарт Фортран 77 Указать компилятору, что при работе с массивами, расположенными в common-блоках, реальный размер может оказаться больше, чем указано в исходнике Разрешить использование всех встроенных функций независимо от указанного стандарта Разрешить использование подчерка в начале идентификатора Не разрешать трактовать локальные переменные нерекурсивных процедур как SAVE Интерпретировать символ " Разрешить использование Cray Pointers Игнорировать символ "D" в первой колонке Интерпретировать символ "D" в первой колонке как знак комментария Разрешить синтаксис DEC, включает все опции, которые начинаются на -fdec Разрешить дополнительные встроенные функции с использованием разновидности целого Разрешить дополнительные встроенные математические функции Разрешить атрибуты AUTOMATIC и STATIC - то же самое, что атрибут SAVE Разрешить запись DEC структур и записей - то же самое, что и производный тип, но другой синтаксис Установить размер типа double precision в 8 по умолчанию Установить размер типов integer и logical в 8 по умолчанию Установить размер типа real в 8 по умолчанию Показывать позиции в строке исходного текста с помощью специального знака Показывать номер строки текста, если диагностическое сообщение содержит несколько строк. Допустимые значения <val>: once, every-line Печатать в диагностическом сообщении опцию, в результате действия которой это сообщение появилось Разрешить символ "$" в идентификаторе в качестве не первого символа Игнорируется Установить форму исходного файла фиксированной, независимо от расширения Установить размер строки в <val> для фиксированной формы файла Разрешить произвольный размер строки для свободной формы файла Установить форму исходного файла свободной, независимо от расширения Установить позицию в строке, после которой символы игнорируются Разрешить произвольный размер строки для свободной формы файла Отменить умолчания типа для идентификаторов в зависимости от первой буквы Интерпретировать переменные, описанные с типом INTEGER(4) как INTEGER(8) Установить директорию для поиска встроенных модулей Установить максимально допустимый размер идентификатора Установить доступ PRIVATE ко всем объектам модулей по умолчанию Не разрешать изменять порядок вычислений в выражении (порядок определяется скобками) Выводить сообщения об ошибках в процессе константных вычислений при компиляции Интерпретировать переменные, описанные с типом REAL(4) как REAL(8) Интерпретировать переменные, описанные с типом REAL(4) как REAL(10) Интерпретировать переменные, описанные с типом REAL(4) как REAL(16) Интерпретировать переменные, описанные с типом REAL(8) как REAL(4) Интерпретировать переменные, описанные с типом REAL(8) как REAL(10) Интерпретировать переменные, описанные с типом REAL(8) как REAL(16) Разрешить переразмещение Allocatable левой части присваивания

Опции управления языковыми настройками Фортрана, влияющими на генерацию кода
Игнорировать функции с одинаковым списком аргументов внутри оператора, независимо от того, объявлены они как PURE или нет Разрешить (запретить) выравнивание в COMMON блоках Выдавать стек при получении сигнала завершения Разрешить (запретить) чистку и восстановление флагов floating-point прерываний при работе с фортрановскими модулями вещественной арифметики Выдавать пользовательскую ошибку при встрече вложенной процедуры в качестве аргумента другой процедуры Эквивалентно -fcheck=bounds Эквивалентно -fcheck=array-temps Выдавать предупреждения во время исполнения. Значения <val> следующие: bounds (выход за границы массива, секции, строки), array-temps (создание временного массива в качестве аргумента процедуры), recursion (рекурсивный вызов нерекурсивной процедуры), do (неверные значения переменных цикла DO), pointer (использование неразмещённых переменных или неассоциированных указателей в качестве аргумента), mem (использование неразмещённой переменной в левой части присваивания) Установить способ работы с co-массивами. Значения <val> следующие: none (в программе не должно быть co-массивов), single (co-массивы в программе допускаются, но параллелизма нет), lib (указывается имя библиотеки, где реализован параллелизм) Установить порядок байтов в представлении числа. Значения <val> следующие: big-endian (порядок байтов от старшего к младшему), little-endian (порядок байтов от младшего к старшему), native (значение по умолчанию), swap (обратное значению по умолчанию) Определить список floating-point прерываний для вывода. Допустимые значения <val>: all (все), none (никакие), либо, через запятую, любая комбинация из invalid, denormal, zero, overflow, underflow, inexact, precision Определить список floating-point прерываний для вывода и прервать исполнение программы при возникновения указанного прерывания исполнение программы. Допустимые значения <val> те же, что и в -ffpe-summary Выполнять оптимизацию фронтенда во время обработки дерева разбора. Опция автоматически включается по любой опции оптимизации уровня -O1 и выше Установить неявную инициализацию значением <val> для строковых переменных Установить неявную инициализацию компонент производного типа в соответствиим с другими опциями, которые начанаются на -finit Установить неявную инициализацию значением <val> для целочисленных переменных Установить неявную инициализацию нулём для всех локалов Установить неявную инициализацию значением <val> для логических переменных. Допустимые значения <val>: true, false Установить неявную инициализацию значением <val> для вещественных переменных. Допустимые значения <val>: zero, snan, nan, inf, -inf Установить максимальный размер матрицы, при котором функцию matmul можно сделать inline Установить максимально допустимое количество элементов в конструкторе массива Установить максимальный размер (в байтах) массива, который можно разместить на стеке Установить максимальную длину subrecord (для ввода-вывода) Установить размер маркера длины записи для неформатированных файлов. Допустимые значения <val>: 4, 8 Размещать локальные переменные на стеке, чтобы разрешить рекурсию Добавлять второй подчерк в имя функции, если уже есть один Добавлять знак при выводе отрицательного нулевого вещественного числа Распределять временные массивы на стеке, если их размер не более <val> байт, иначе в памяти Добавлять для внешних имён в конце подчерк Включить строгое соблюдение стандарта при построении счётчика цикла. По умолчанию компилятор в режиме языка Fortran строит счётчик цикла в виде знакового целого. За счёт этого к циклу без дополнительных преобразований могут применяться цикловые оптимизации с аппаратной поддержкой, такие как конвейеризация цикла с наложением итераций, аппаратная предподкачка массивов, раскрутка цикла. Однако, в таком режиме цикл может работать некорректно, если верхняя граница цикла равна максимальному значению знакового целого (2^31 - 1). Опция -fstrict-loop-counter гарантирует корректную работу цикла в случае произвольной верхней границы. Однако это требует построения кода, к которому сложно применить вышеуказанные оптимизации. В зависимости от конкретного случая, замедление может варьироваться от процентов до нескольких раз. По умолчанию опция выключена.

Опции, влияющие на программные соглашения
В режиме C/C++ использовать тип unsigned short int для настройки типа wchar_t. ВНИМАНИЕ! По этой опции генерируется код, бинарно НЕ совместимый с кодом, построенным без этой опции В режиме C/C++ выделять минимально необходимое количество памяти для хранения enum'ов ВНИМАНИЕ! По этой опции генерируется код, бинарно НЕ совместимый с кодом, построенным без этой опции

Опции управления препроцессированием
Добавить директорию <dir> к списку директорий для поиска заголовочных файлов Указать директорию для сохранения и использования информации о модуле Фортрана Добавить директорию <dir> к списку директорий для поиска заголовочных файлов, подключаемых только через #include "..." Добавить директорию <dir> к списку директорий для поиска системных заголовочных файлов Добавить директорию <dir> в конец списка директорий для поиска заголовочных файлов Включить файл <file> в самое начало компилируемой программы Опция аналогичная -include, но из файла <file> берутся только макроопределения Задать макроопределение для препроцессора Отменить макроопределение для препроцессора Остановиться после стадии препроцессирования; не запускать собственно компилятор. Вывод делается в форме препроцессированного исходного кода, который посылается на стандартный вывод. При подаче на вход нераспознанного файла (включая случаи, когда подается нераспознанный и распознанный файл вместе) компилятор выдает следующее сообщение об ошибке: “lcc: ошибка: <имя нераспознанного файла>: файл неизвестного типа передан для компиляции”. В режиме -E: не генерировать директивы #line В режиме -E: сохранять комментарии В режиме -E: вместо препроцессирования печатать список макроопределений, полученных к концу компиляции В режиме -E: включать в препроцессорную выдачу директивы #include В режиме -E: использовать расширенный вариант препроцессирования. В расширенном варианте препроцессирования первый символ каждой строки выходного текста является информационным со следующим смыслом: N (normal): оригинальная строка исходника X (expand): следует только за строками N в случаях, когда оригинальная строка исходного текста была изменена в процессе препроцессорных подстановок S (skip): строка, пропускаемая за счёт условных препроцессорных директив типа #if L (line): изменение файла и номера строки за счёт подстановки файла директивой #include R (remark), W (warning), E (error), C (catastrofic error): индикация замечания, предупреждения, ошибки или катастрофической ошибки

Включить (выключить) предварительное препроцессирование для исходного текста на Фортране Генерировать список зависимостей для программы make и печатать их на экран, компиляцию не запускать Генерировать список зависимостей для программы make и сохранять их в файл Опция аналогична -M, но не формировать зависимости от системных файлов Опция аналогична -MD, но не формировать зависимости от системных файлов При использовании опции -M, -MM, -MD или -MMD: использовать имя цели <name> Аналогично -MT <name>, но при печати <name> экранировать символы, которые специальным образом трактуются программой make При использовании опции -MD или -MMD: сохранять зависимости в файле <file> При использовании опции -M, -MM, -MD или -MMD: генерировать специальные цели на случай удаления требуемых файлов Печатать имена подключаемых заголовочных файлов Не создавать дополнительных предопределенных макроопределений Не пользоваться стандартными путями поиска заголовочных файлов Не пользоваться стандартными путями поиска заголовочных файлов C++ Установить кодировку входного текста программы Установить кодировку исполнения для ordinary строковых и символьных литералов Установить кодировку исполнения для wide строковых и символьных литералов Печатать имена подключаемых модулей Фортрана

Опции управления режимом компиляции
Разрешить (запретить) замену вызовов некоторых стандартных функций на соответствующие builtin'ы. При включенной опции вызов, например, функции abs, будет заменён на __builtin_abs. Замена происходит в случае, если прототип вызываемой функции совпадает с прототипом стандартной функции и если в модуле отсутствует определение данной функции. Дополнительно в режиме языка C включается возможность использования вызова функции с константным аргументом в качестве статического инициализатора. Если на функцию было взятие адреса, то замена на builtin не производится. На текущий момент опция влияет на функции: abs, labs, llabs, imaxabs, cabs, cabsf, cabsl, cimag, cimagf, cimagl, conj, conjf, conjl, copysign, copysignf, copysignl, cos, cosf, cosl, creal, crealf, creall, fabs, fabsf, fabsl, ffs, ffsl, ffsll, isinf, isinff, isinfl, isnan, isnanf, isnanl, lrint, lrintf, lrintl, llrint, llrintf, llrintl, memcpy, memset, printf, fprintf, pow, powf, powl, rint, rintf, rintl, sin, sinf, sinl, strcmp, strncmp, strcpy, strncpy, strlen, sqrt, sqrtf, sqrtl, Опция включена по умолчанию Запретить замену стандартной функции <func> на соответствующий builtin Разрешить (запретить) распределение переменных в секцию .common Только проверять синтаксис, не компилировать Генерировать позиционно-независимый код Аналогично -fPIC (-fno-PIC) Генерировать позиционно-независимый код, подходящий только для исполняемых файлов Аналогично -fPIE (-fno-PIE) Добавить имя файла к именам статических переменных и функций Генерировать код программы для получения профиля для дальнейшего его использования программой gprof Создавать в процессе компиляции файлы с информацией о дугах для программы gcov Создавать в процессе компиляции файлы с информацией о базовых блоках для программы gcov Эквивалентно комбинации опций -fprofile-arcs, -ftest-coverage

Архитектурно-зависимые опции
Запретить компилятору использовать регистр <reg> для распределения. Данная опция распространяется только на те случаи, когда компилятор сам выбирает регистры из списка доступных. Опция НЕ влияет на случаи, когда регистр используется в соответствии с программными соглашениями (например, опция не влияет на распределение параметров функции). Опция используется, например, в случаях, когда значения между ассемблерными вставками передаются напрямую через регистры (а не через языковые переменные). Такие ситуации могут возникнуть, например, в системном софте, когда реализация "по-человечески" оказывается слишком сложной или неэффективной. Допустимые значения параметра <reg>: fp, sp, g0, ..., g7, o0, ..., o7, i0, ..., i7, f0, ..., f63 Опция является полным аналогом соответствующей опции gcc Отметить регистр <reg> как портящийся при вызовах. Компилятор при построении операций вызова будет сохранять значение данного регистра, а после операции вызова восстанавливать. Опция используется, например, в системном софте, когда операция вызова происходит нестандартными методами (без переключения регистрового окна и т.п.). Допустимые значения параметра <reg> аналогичны опции -ffixed-<reg> Опция является полным аналогом соответствующей опции gcc Разрешить (запретить) inline-подстановку gnu ассемблерных вставок (только в режиме с оптимизациями) Использовать модель памяти <cmodel>. Данная опция допустима только для режима -mptr64. Параметр опции может принимать следующие значения: medlow, medmid, medany, embmedany Отключить (включить) генерацию инструкций вещественной арифметики и использовать программные реализации из библиотеки поддержки Запретить (разрешить) генерацию операций ldd/std Запретить (разрешить) использование регистров %g2, %g3, %g4 Включить (выключить) поддержку vis и режим -mil-inline (-mno-il-inline) Опция игнорируется (deprecated) Запретить использование аппаратной поддержки при построении атомарных операций над типами, не имеющими по языку достаточное выравнивание

Опции отладочной информации
Отключить генерацию отладочной информации Генерировать отладочную информацию Эквивалентно опции -g (для совместимости с gcc) При построении отладочной информации в формате DWARF-2 использовать формат "64-bit", являющийся частью формата DWARF-3 Добавить дополнительные отладочные печати в ассемблерный файл Строить в коде информацию для идентификации компилятора

Дополнительные опции
Задать режим сборки ядра ОС Linux. Подразумевается режим запрета прерываний при обработке системных регистров. Подразумевается нестандартное API в части глобальных регистров. Включает опции: -fforce-inline, -fno-global-regs, -fno-devirtualize, -fno-vect, -fno-inline-part, -fno-loop-peeling, -fno-loop-nesting. Запретить плавающие операции. Компилятор может выполнять некоторые оптимизации, закладывающиеся на отсутствие вещественной арифметики. В случае использования вещественной арифметики компилятор может выдавать ошибку. Включить подстановку функций (включается по опции -O2) Включить более агрессивную подстановку функций (включается по опции -O3) Включить частичную подстановку функций (включается по опции -O3) Включить агрессивную подстановку функций в маленькие функции с единстенным вызовом. По умолчанию компилятор самостоятельно решает какие функции лучше подставлять, пытаясь достичь разумного компромисса между увеличением времени компиляции и снижением времени исполнения программы. При этом подставляются в основном небольшие функции. Данная опция включает подстановку функций среднего размера в небольшие функции-обёртки, содержащие единственный вызов функции. Наличие данной опции может привести к дополнительному росту кода и замедлению компиляции. Включить агрессивную подстановку static функций в не-static функции Включить агрессивную подстановку static функций с единственным вызовом Учесть неполную профильную информацию при подстановке функций Не выдавать ошибку в случае невозможности inline-подстановки функции с атрибутом always_inline. Компилятор обязан подставить функции с атрибутом always_inline во все точки вызова. При этом у компилятора есть свои технические ограничения на inline-подстановку, например, по размеру кода, профильной информации, различию режимов сборки функций при межмодульной оптимизации, некоторых языковых особенностей и т.д.. Если компилятор не может подставить функцию с атрибутом always_inline, то он по умолчанию выдаёт ошибку. По опции -fno-error-always-inline такие ошибки игнорируются и компиляция продолжается, несмотря на то, что часть функций с атрибутом always_inline не была подставлена. Т.е. опция влияет лишь на выдачу ошибки, но не влияет на inline-подстановку. В большинстве случаев игнорирование атрибута always_inline не является фатальным и приводит только к замедлению кода. Однако в редких случаях игнорирование может приводить к ошибке, если речь идёт о специфических кодах системного уровня, где наличие операции вызова функции приводит к недопустимому изменению контекста при работе аппаратуры (характерно для ядра операционной системы, драйверов и т.п.). Стоит отметить, что подобные ошибки могут быть вызваны не только техническими ограничениями самого компилятора, но и некорректными действиями пользователя. Например, навешиванием атрибута always_inline на рекурсивную функцию или подачу опции -fforce-inline при компиляции большого исходника на языке C++. В межпроцедурных оптимизациях учитывать возможный interposing of symbols при построении кода динамических библиотек Задать режим компиляции вне стандартного окружения. Дополнительно включает -Wno-main, -Wno-builtin-functions-redefined, -fno-stdlib, -fno-builtin, -fno-use-memcpy, -fno-use-memset, -fno-malloc-opt Задать режим компиляции в стандартном окружении Подразумевать, что стандартные C функции имеют обычную реализацию Не использовать вызов функции memcpy для копирования структур и __builtin_memcpy Не использовать вызов функции memset для __builtin_memset Не использовать директивы .size для функций в выходном ассемблерном тексте Задать значение __attribute__((visibility)) для переменных и функций без атрибута Неявно задать __attribute__((visibility("hidden"))) для нешаблонных inline-методов класса, у которых нет явно описанного __attribute__((visibility)) Задать минимальное ограничение по модели tls, назначаемой компилятором переменным без явно заданного __attribute__((tls_model)) Включить (выключить) анализ указателей на основе типов Включить (выключить) расширенный анализ указателей на основе типов Включить (выключить) межпроцедурный анализ функций При раскрытии макроса __FILE__ пропустить путь до файла и оставить только имя файла Выранивать большие функции на величину instruction cache line Выранивать большие функции на величину <val>, которая должна быть степенью двойки Выранивать инструкции, на которые можно попасть только переходом, на величину instruction cache line Выранивать инструкции, на которые можно попасть только переходом, на величину <val> Включить преобразование вызовов виртуальных функций в вызовы функций по имени Запретить применение оптимизации TLS Запретить применение оптимизации TLS для указанных процедур Конструкции asm entry печатать в начале ассемблерного файла, а не в конце Размещать каждую глобальную переменную в отдельную секцию Размещать каждую функцию в отдельную секцию Запретить применение оптимизаций Tail Calls и Tail Recursion Запретить применение оптимизации Tail Calls Удаление проверок на 0 после обращения к полю объекта Запретить удаление проверок на 0 после обращения к полю объекта Запретить построение символов STB_GNU_UNIQUE Разрешить размещение структур на регистрах в защищенном режиме. В остальных режимах исполнения опция игнорируется. При подаче данной опции не гарантируется корректное поведение программы в случае записи в поле структуры неинициализированных данных. Сделать фортрановские common'ы видимыми за пределами текущего модуля. В языке C это соответствует простановке __attribute__((externally_visible)). Данная опция отменяет понижение области видимости common переменных в режиме -fwhole. Её необходимо подавать в режиме -fwhole в случае, когда в программе есть обращения к библиотечным переменным, описанным как common. Режим по умолчанию -fno-fortran-extern-commons Инициализировать нулём автоматические локальные переменные: целые, вещественные, указатели, структуры и union'ы. Массивы по этой опции не инициализируются. При компиляции под Эльбрус в режиме -mptr32 и -mptr64 оптимизирующий компилятор инициализирует нулём некоторые скалярные автоматические переменные, которые могут быть использованы неинициализированными. Эта инициализация включена по умолчанию начиная с уровня -O1 и не может быть отключена опциями. В режиме -mptr128 компилятор по умолчанию не инициализирует переменные. Поэтому программы, в которых есть использование неинициализированных данных (а это грубая ошибка в программе), могут успешно исполняться в режиме -mptr64 и ломаться в режиме -mptr128 из-за более строгого аппаратного контроля за неинициализированными данными. Таким образом, опция -finit-locals-zero позволяет облегчить портирование программ, написанных с ошибками, для режима -mptr128. При этом нужно понимать, что эта опция не исправляет ошибки, а лишь маскирует их. Следует различать опции -finit-local-zero и -finit-locals-zero. Первая управляет поведением фронтенда языка Фортран, вторая управляет поведением оптимизирующего бэкенда для всех языков. По смыслу эти опции близки друг к другу. Опция -finit-locals-zero игнорируется в режиме -fsanitize=*

Опции форматирования выдачи компилятора
Задать ограничение в <num> символов на ширину выдаваемых сообщений. Если выдаваемое сообщение не влезает в данное ограничение, то оно разбивается на несколько строк. Если значение <num> равно 0, то ограничение на ширину отсутствует. На текущий момент все остальные значения параметра трактуются как ограничение ширины сообщений по умолчанию (80 символов). Эквивалентно -fdiagnostics-color=always Эквивалентно -fdiagnostics-color=never Установить режим подкраски диагностических сообщений. Допустимые значения <val>: never, always, auto

Опции настройки выдачи ошибок
Прервать работу после вывода первой ошибки Прервать работу после вывода <n> ошибок

Опции предупреждений
Игнорируется Игнорируется Игнорируется Игнорируется Для языка Фортран предупреждать о возможных совмещениях имён формальных аргументов Для языка Фортран предупреждать о выравниваниях в COMMON блоках Игнорируется Игнорируется Игнорируется Игнорируется Предупреждать об игнорировании __attribute__((aligned)), вызывающего уменьшение выравнивания типа Предупреждать об использовании оператора __alignof__, применённого к незавершённому типу Отображать все предупреждения по поводу спорных конструкций, которые могут быть легко модифицированы. Для языков C/C++ эквивалентно комбинации опций -Waddress, -Warray-bounds, -Wc++11-compat, -Wc++14-compat, -Wchar-subscripts, -Wcomment, -Wenum-compare, -Wimplicit-int, -Wimplicit-function-declaration, -Wformat, -Wmain (только в режиме языка C), -Wmaybe-return-local-addr, -Wmaybe-uninitialized, -Wnonnull, -Wparentheses, -Wpointer-sign, -Wreorder, -Wreturn-type, -Wreturn-local-addr, -Wsequence-point, -Wsign-compare (только в режиме языка C++), -Wsigned-one-bit-field, -Wstrict-aliasing, -Wstrict-overflow=1, -Wtrigraphs, -Wtrigraphs, -Wuninitialized, -Wunused-but-set-variable, -Wunused-function, -Wunused-label, -Wunused-local-typedefs, -Wunused-value, -Wunused-variable, -Wvolatile-register-var. Для языка Фортран эквивалентно комбинации опций -Waliasing, -Wampersand, -Wc-binding-type, -Wconversion, -Winteger-division, -Wintrinsic-shadow, -Wintrinsics-std, -Wline-truncation, -Wmaybe-uninitialized, -Wreal-q-constant, -Wreturn-type, -Wsurprising, -Wtabs, -Wtarget-lifetime, -Wundefined-do-loop, -Wuninitialized, -Wunused, -Wzerotrip. В данном случае слово "all" НЕ означает, что будут выдаваться все предупреждения (опция унаследована от gcc с тем же смыслом, что и в gcc). Для получения всех возможных предупреждений пользуйтесь опцией -Wall-warnings Эквивалентно комбинации опций -Warray-bounds, -Wint32-to-pointer-cast-protected, -Wint64-to-pointer-cast-protected, -Wint128-to-pointer-cast-protected, -Wpointer-to-int32-cast-protected, -Wpointer-to-int64-cast-protected, -Wpointer-to-int128-cast-protected, -Wuninitialized, -Wmaybe-uninitialized Предупреждать о недопустимом размере выделяемой памяти в модели данных -mdmodel=medium Игнорируется Игнорируется Для языка Фортран предупреждать об отсутствующем символе "&" в продолжении строковой константы Предупреждать о несовместимости типов формальных и фактических параметров в режиме -fwhole Для языка Фортран предупреждать о различии типа или размерности у формальных и фактических аргументов Предупреждать о выходе за границу массива (начиная с уровня -O2) Пример кода, вызывающего данное предупреждение: void func (void) { int x[5];

x[6] = 0; } Исключением являются выходы за границу для одномерных массивов размером в 1 элемент, расположенных в самом конце объекта и находящихся внутри структуры (которая может быть вложенной), в случаях, когда доступ к такому массиву идёт через указатель на структуру. Сделано это из тех соображений, что статистически значимым является технический приём по выделению памяти под структуру, при этом размер выделяемой памяти может быть большим, чем размер структуры. Пример кода, в котором формально есть выход за границу массива, но предупреждение НЕ выдаётся: struct s { int n; int a[1]; };

void func (void) { struct s *p; int n = 3;

p = malloc (sizeof (struct s) + (n - 1) * sizeof (int)); p->n = n; p->a[0] = 10; p->a[1] = 20; p->a[2] = 30; } Игнорируется Игнорируется Аналогично -Warray-bounds, но без исключений. Включает в себя -Warray-bounds Для языка Фортран предупреждать о создании временных массивов Предупреждать о предположительно ошибочном использовании "=" вместо "==" Предупреждать о некорректном имени атрибута или неприменимости данного атрибута. Включает в себя -Wignored-attribute-cleanup, -Wincorrect-attribute-fallthrough Игнорируется Предупреждать об инициализаторе несоответствующего типа Предупреждать об переопределении макроса другим содержимым Предупреждать об возврате значения несоответствующего типа Предупреждать об объявлении функций, совпадающих по имени с builtin'ом, но отличающихся прототипом Предупреждать о наличии собственных реализаций библиотечных функций, которые должны раскрываться в режиме -fbuiltin Для языка Фортран предупреждать о типе переменной, несовместимом с языком C Игнорируется Игнорируется Игнорируется Игнорируется Эквивалентно -Wc++11-compat Игнорируется Игнорируется Игнорируется Игнорируется Игнорируется Игнорируется Для языка Фортран предупреждать об обрубании символьных выражений Игнорируется Предупреждать о вложенных комментариях Эквивалентно -Wcomment Для языка Фортран предупреждать о сравнении на равенство (неравенство) вещественных или комплексных Игнорируется Предупреждать об использовании const переменных в местах, где допустимы только const выражения (только в режиме языка C) Предупреждать об управляющих условных выражениях, являющихся константами Предупреждать о constexpr выражениях, которые не могут быть свёрнуты в константу Предупреждать об операциях неявного преобразования типов, которые могут изменить значение. Включает в себя -Wfloat-conversion, -Winteger-sign-change Для языка Фортран предупреждать о неявных преобразованиях (не для всех преобразований) Для языка Си++ предупреждать о том, что пользовательский оператор преобразования типа не будет использован Игнорируется В режиме -fprofile-use предупреждать о несоответствии между профилем и исходным текстом Игнорируется Игнорируется Игнорируется Игнорируется Эквивалентно -Wbuiltin-declaration-mismatch Для языка C++ предупреждать об использовании указателя незавершённого типа в операторе delete Игнорируется Предупреждать о deprecated конструкциях Игнорируется Игнорируется Предупреждать об использовании переменной, функции или типа с __attribute__((deprecated)) Предупреждать о позиционной инициализации структуры, объявленной с __attribute__((designated_init)) Предупреждать о неявном преобразовании типа между указателями, при котором теряются квалификаторы (только в режиме языка C, в языке Си++ такие преобразования запрещены) Предупреждать о целочисленном делении на ноль (начиная с уровня -O1) Игнорируется Игнорируется Игнорируется Предупреждать о дублирующих описаниях clobber'ов ассемблерной вставки Игнорируется Предупреждать о дублирующих спецификаторах Предупреждать о дублирующих квалификаторах типов Игнорируется Предупреждать о пустой последней альтернативе оператора if Предупреждать о лишнем тексте после препроцессорных директив Предупреждать о сравнении величин различных enum-типов Предупреждать об отсутствии перевода строки в конце файла Предупреждать о переопределении функций extern inline в режиме GNU C Включить дополнительные предупреждения, не включаемые через -Wall. Для языков C/C++ эквивалентно комбинации опций -Wclobbered, -Wempty-body, -Wignored-qualifiers, -Wmissing-parameter-type, -Wold-style-declaration, -Wsign-compare, -Wtype-limits, -Wuninitialized, -Wmaybe-uninitialized, -Wunused-parameter. Для языка Фортран эквивалентно комбинации опций -Wcompare-reals, -Wunused-parameter, -Wuninitialized. Игнорируется Предупреждать о лишних символах ';' Игнорируется Игнорируется Игнорируется Проверять аргументы вызова некоторых стандартных функций, работающих с форматной строкой. Включает в себя -Wformat-extra-args, -Wnonnull Эквивалентно -Wformat Предупреждать о наличии лишних параметров в вызовах функций с форматной строкой типа printf и scanf Игнорируется Игнорируется Игнорируется Игнорируется Игнорируется Игнорируется Игнорируется Игнорируется Игнорируется Игнорируется Игнорируется Игнорируется Эквивалентно комбинации опций -Wformat, -Wformat-nonliteral, -Wformat-security, -Wformat-y2k Игнорируется Предупреждать о вызове функции, не имеющей прототипа в данном модуле в случае если это может привести к ошибке (начиная с уровня -O1). Работает только в режиме -fwhole Для языка Фортран предупреждать о игнорировании вызова функции Игнорируется Предупреждать об игнорировании __attribute__((cleanup)) в режиме C++ Предупреждать об известных директивах #pragma, которые игнорируются в текущем режиме компиляции Предупреждать об игнорируемых квалификаторах Эквивалентно комбинации опций -Wimplicit-int, -Wimplicit-function-declaration Игнорируется Игнорируется Игнорируется Игнорируется Игнорируется Игнорируется Игнорируется Предупреждать о неявных определениях функций (только в режиме языка C) Предупреждать о неявном типе int для декларации функции без описания результата (только в режиме языка C) Пример кода, вызывающего данное предупреждение: func (void) { return 1; } Для языка Фортран предупреждать о вызовах функций с неявным интерфейсом Для языка Фортран предупреждать о вызовах процедур, у которых нет явного описания Предупреждать о неявном преобразовании типов для векторных типов с одинаковымы размерами, но разными базовыми типами Предупреждать о неявном преобразовании типа из указателя в указатель несовместимого типа (только в режиме языка C, в языке Си++ такие преобразования запрещены) Предупреждать о несовместимых типах аргументов тернарного условного оператора Для языков C/C++ предупреждать о случаях неправильного использования __attribute__((fallthrough)) внутри оператора switch Предупреждать о процедурах, для которых была применена опция -fno-math-errno, однако запись в переменную errno по факту производится в данной функции или в вызываемых ею функциях. Игнорируется Предупреждать о невозможности inline-подстановки функций (начиная с уровня -O2) Предупреждать о конфликтах между inline и noinline Предупреждать о неявном преобразовании типа из целого в указатель и из указателя в целое (только в режиме языка C, в языке Си++ такие преобразования запрещены) Предупреждать о явном преобразовании типа из целого в указатель с отличающимся размером. В защищённом режиме опция игнорируется Предупреждать о явном преобразовании типа из целого в указатель с совпадающим размером. В защищённом режиме опция игнорируется В защищённом режиме предупреждать о явном преобразовании типа из целого размером 32 бита и меньше в указатель В защищённом режиме предупреждать о явном преобразовании типа из целого размером 64 бита в указатель В защищённом режиме предупреждать о явном преобразовании типа из целого размером 128 бит в указатель Для языка Фортран предупреждать о делении целых констант с обрубанием результата Для языка Фортран предупреждать о совпадении имён пользовательской и встроенной процедур Для языка Фортран предупреждать о встроенной функции, которая не входит в указанный стандарт Предупреждать о преобразовании типа, приводящего к изменению знака целого Предупреждать о некорректных параметрах некоторых builtin-функций (начиная с уровня -O1) Предупреждать о некорректных параметрах, соответствующих модели памяти в атомарных builtin'ах Игнорируется Предупреждать о некорректных параметрах известных директив #pragma Предупреждать о некорректном использовании offsetof и __builtin_offsetof (только в режиме языка C++) Предупреждать о переходе через инициализацию Для языка Фортран предупреждать об обрубании строк исходного текста Игнорируется Игнорируется Игнорируется Предупреждать о неверном объявлении функции main Предупреждать о возможном возврате из функции адреса автоматической переменной (начиная с уровня -O1) Предупреждать о возможно неинициализированных скалярных автоматических переменных (начиная с уровня -O1) Игнорируется Игнорируется Игнорируется Для языка Фортран предупреждать о несуществующей include директории Игнорируется Игнорируется Предупреждать об отсутсвии в конструкторе инициализатора для константных или ссылочных полей (только в режиме языка C++) Предупреждать об отсутствии инициализатора у переменной с квалификатором const (только в режиме языка C) Игнорируется Предупреждать об отсутствия типа у параметра функции K&R (только в режиме языка C) Игнорируется Предупреждать о смешивании enum и не-enum типов Предупреждать о наличии multichar литералов Предупреждать о narrowing conversions Игнорируется Игнорируется Игнорируется Игнорируется Предупреждать о замыкающих запятых, не соответствующих стандарту Предупреждать о невиртуальном деструкторе базового класса Предупреждать о передаче нулевого указателя в качестве аргумента, помеченного через __attribute__((nonnull)) Игнорируется Игнорируется Игнорируется Игнорируется Игнорируется Игнорируется Игнорируется Игнорируется Игнорируется Предупреждать о декларациях в устаревшем стиле (только в режиме языка C) Предупреждать об описании процедуры в старом стиле (только в режиме языка C). Включает в себя -Wimplicit-function-declaration, -Wimplicit-int Игнорируется Предупреждать об известных директивах #pragma, которые поставлены в неправильном месте исходника Предупреждать о целочисленном переполнении Игнорируется Предупреждать об объявлениях виртуальных методов, которые скрывают виртуальные методы базового класса Игнорируется Игнорируется Игнорируется Игнорируется Предупреждать о списке параметров без описания типов в описании функции Игнорируется Предупреждать о ситуациях, когда переопределены не все перегрузки виртуального метода Предупреждать о вычислениях над указателями на функции или на void Эквивалентно -Wdiscarded-qualifiers. Опция устарела и будет удалена Предупреждать о неявном преобразовании типа между указателями, отличающимися только знаковостью базовых типов (только в режиме языка C, в языке Си++ такие преобразования запрещены) Предупреждать о явном преобразовании типа из указателя в целое с отличающимся размером (только в режиме языка C). В защищённом режиме опция игнорируется Предупреждать о явном преобразовании типа из указателя в целое с совпадающим размером (только в режиме языка C). В защищённом режиме опция игнорируется В защищённом режиме предупреждать о явном преобразовании типа из указателя в целое размером 32 бита и меньше (только в режиме языка C, в языке Си++ такие преобразования запрещены) В защищённом режиме предупреждать о явном преобразовании типа из указателя в целое размером 64 бита В защищённом режиме предупреждать о явном преобразовании типа из указателя в целое размером 128 бит Эквивалентно -Wincompatible-pointer-types. Опция устарела и будет удалена Предупреждать (начиная с уровня -O2) о значениях pragma unroll, которые могут ухудшить производительность Предупреждать о некорректном использовании директив #pragma Игнорируется Предупреждать об операторах __real и __imag, применяемых к целочисленному или вещественному значению Для языка Фортран предупреждать о вещественных константах с обозначением экспоненты буквой "q" Для языка Фортран предупреждать о том, что левая часть массивного присваивания будет заново размещена Для языка Фортран предупреждать о том, что левая часть присваивания будет заново размещена Предупреждать о настройке меньшего выравнивания переменной, чем написано в __attribute__((alignment)) Игнорируется Проверять порядок инициализации полей класса в конструкторе (только в режиме языка C++) Игнорируется Предупреждать о гарантированном возврате из функции адреса автоматической переменной (начиная с уровня -O1) и дополнительно включить опцию -Wmaybe-return-local-addr Предупреждать о неявных return из не-void функции Игнорируется Проверять, что локальная переменная скрывает другую переменную с таким же именем Игнорируется Игнорируется Эквивалентно -Wshadow=global Эквивалентно -Wshadow=local Эквивалентно -Wshadow=compatible-local Предупреждать, если величина сдвига превышает битовый размер типа аргумента сдвига Предупреждать о сравнении знаковых и беззнаковых величинах Игнорируется Игнорируется Предупреждать о знаковом битовом поле размером 1 бит Игнорируется Игнорируется Игнорируется Игнорируется Игнорируется Предупреждать о вызове static-функции или использовании static-переменной в inline-функции в режиме языка C99 и выше Предупреждать о несоответствии прототипа со стандартным для функций, описанных в стандарте языка Си (начиная с уровня -O1). Работает только в режиме -fstdlib Эквивалентно -Wstrict-aliasing=3 Предупреждать о потенциально возможных нарушениях правил перекрытия объектов в памяти (правила strict aliasing). Данный анализ включает в себя все результаты -Wstrict-aliasing=3 и -Wstrict-aliasing=2, но за счёт включения анализа приведений типов, потенциально ведущих к нарушениям правил перекрытия объектов в памяти может иметь большое количество ложных срабатываний. Работает только в режиме -fstrict-aliasing. Пример кода, вызывающего данное предупреждение: float f; int *p = (int*) &f; Предупреждать о возможных нарушениях правил перекрытия объектов в памяти (правила strict aliasing). Данный анализ включает в себя все результаты -Wstrict-aliasing=3, но за счёт увеличения количества шаблонов, по которым выдаются нарушения может иметь ложные срабатывания. Работает только в режиме -fstrict-aliasing. Пример кода, вызывающего данное предупреждение: void func (int *a) { float *b = (float*) a; *b = 100.0; } Предупреждать о гарантированных нарушениях правил перекрытия объектов в памяти (правила strict aliasing). Является наиболее точным анализом ошибок strict-aliasing. Работает только в режиме -fstrict-aliasing. Пример кода, вызывающего данное предупреждение: void func (void) { int z = 0; int *a = &z; float *b = (float*) a; *b = 100.0; } Игнорируется Игнорируется Игнорируется Игнорируется Игнорируется Игнорируется Игнорируется Предупреждать об описании или определении функции без явного описания аргументов (только в режиме языка C) Игнорируется Игнорируется Игнорируется Игнорируется Игнорируется Игнорируется Игнорируется Предупреждать о процедурах, в которых возможно было бы указать атрибут cold. Такое предложение возникает если все пути от начала функции до выхода из неё будут проходить через вызов процедур, обладающих признаком cold. Предупреждать о процедурах, в которых возможно было бы указать атрибут const. Данный признак означает что процедура не имеет побочных эффектов. Т.е. её вызов с одинаковым аргументом в любой момент исполнения программы всегда даст один и тот же результат. Это свойство позволяет удалять несколько последовательно идущих вызовов, например: a = cos(0); a = cos(0); a = cos(0); a = cos(0); Будет преобразовано к виду a = cos(0); Данный признак опасно выставлять процедурам, возвращаемое значение которых зависит от переменных, меняющихся в соседних потоках, или каким-либо образом зависимым от побочных эффектов Игнорируется Предупреждать о процедурах, в которых возможно было бы указать атрибут malloc. Такое предложение возникает если процедура всегда возвращает указатель на выделенную в ней память или нулевой указатель. Предупреждать о процедурах, в которых возможно было бы указать атрибут noreturn. Такое предложение возникает если процедура никогда не возвращает управление. Т.е. если на любом пути исполнения будет стоять вызов noreturn процедур (например exit). Предупреждать о процедурах, в которых возможно было бы указать атрибут pure. Данный атрибут означает что процедура не имеет побочных эффектов. Т.е. её вызов с одинаковым аргументом в любой момент исполнения программы всегда даст один и тот же результат. Это свойство позволяет удалять несколько последовательно идущих вызовов, например: a = strlen(str); a = strlen(str); a = strlen(str); a = strlen(str); Будет преобразовано к виду a = strlen(str); Данный атрибут отличается от атрибута const тем что позволяет процедуре читать память, указатель на которую передаётся ей в качестве аргумента и возвращать значение в зависимости от его содержимого. Данный атрибут опасно выставлять процедурам, возвращаемое значение которых зависит от переменных, меняющихся в соседних потоках, или каким-либо образом зависимым от побочных эффектов Игнорируется Для языка Фортран предупреждать о подозрительных конструкциях Игнорируется Игнорируется Игнорируется Игнорируется Игнорируется Для языка Фортран предупреждать об использовании символа табуляции Для языка Фортран предупреждать о возможно некорректном присваивании указателей Предупреждать о конструкциях, которые имеют различное поведение в традиционном и ISO C Игнорируется Игнорируется Предупреждать о наличии триграфов в режимах, их не поддерживающих Предупреждать о бессмысленных сравнениях беззнаковой переменной с нулем Предупреждать о повторных typedef'ах с одним и тем же именем Предупреждать об использовании ноля при препроцессировании для неопределенного идентификатора Для языка Фортран предупреждать о о некорректном цикле "DO" Для языка Фортран предупреждать о переполнении в константном выражении Предупреждать о гарантированно неинициализированных скалярных автоматических переменных (начиная с уровня -O1) Предупреждать о неизвестных директивах #pragma Предупреждать о недостижимом коде Игнорируется Игнорируется Для языков C/C++ эквивалентно комбинации опций -Wunused-but-set-variable, -Wunused-function, -Wunused-label, -Wunused-local-typedefs, -Wunused-value, -Wunused-variable. Для языка Фортран эквивалентно комбинации опций -Wunused-dummy-argument, -Wunused-label, -Wunused-parameter, -Wunused-variable Предупреждать о неиспользуемом результате вызова builtin-функции в случаях, когда это не имеет смысла (начиная с уровня -O1) Для языка Фортран предупреждать о неиспользованном формальном параметре, в который есть присваивание Предупреждать об инициализированных, но неиспользуемых переменных. Для выключения данного предупреждения для отдельных переменных используйте __attribute__((unused)). Данное предупреждение включается также по опции -Wunused, которая входит в состав -Wall. Эквивалентно -Wunused-const-variable=2 Предупреждать о неиспользуемых static const переменных. Только в главном компилируемом файле, но не в подключенных файлах через директивы #include Предупреждать о неиспользуемых static const переменных, включая подключенные файлы через директивы #include. Включает в себя -Wunused-const-variable=1 Для языка Фортран предупреждать о неиспользованном формальном параметре Предупреждать о неиспользуемых функциях, кроме static inline функций Предупреждать о неиспользуемых функциях. Включает в себя -Wunused-function Предупреждать о неиспользуемых метках Игнорируется Игнорируется Для языков C/C++ предупреждать о неиспользуемом параметре. Для языка Фортран предупреждать о неиспользованной именованной константе (PARAMETER) Предупреждать о неиспользуемом результате вызова функции с __attribute__((warn_unused_result)) Предупреждать о выражениях, не имеющих эффекта Предупреждать о неиспользуемых переменных. В режиме языка C включает в себя -Wunused-const-variable=1 Эквивалентно -Wunused-variable. Опция устарела и будет удалена Для языка Фортран предупреждать об использовании оператора USE без квалификатора ONLY Игнорируется Игнорируется Игнорируется Игнорируется Игнорируется Предупреждать о неявном преобразовании типа из указателя на void к указателю на функцию (только в режиме языка C, в языке Си++ такие преобразования запрещены) Игнорируется Предупреждать об использовании преобразования строкового литерала в тип char* Игнорируется Для языка Фортран предупреждать о неисполняемых циклах DO Отключить предупреждения, соответствующие опции -W<warn>. Опции с неизвестным <warn> игнорируются Предупреждения, соответствующие опции -W<warn>, трактовать как ошибки Предупреждения, соответствующие опции -W<warn>, не трактовать как ошибки и не превращать их в ошибки по опции -Werror Все предупреждения и замечания трактовать (не трактовать) как ошибки Для языков C/C++ выдавать (не выдавать) предупреждения и замечания в системных заголовочных файлах Отображать все возможные предупреждения, отменить действия всех опций -Werror=<...> Настройки предупреждений вернуть в состояние по умолчанию Выдавать предупреждения о несоответствии строгому стандарту ISO C, ISO C++ или ISO Fortran. Включает в себя -Wtypedef-redefinition То же, что и -pedantic, только выдавать ошибку Включить (выключить) печать замечаний Эквивалентно -Wextra Предупреждать, если размер стека для процедуры превышает <size> байт Игнорируется Игнорируется Эквивалентно -pedantic Подавлять все предупреждения и замечания компилятора, относящиеся к исходному тексту программы Для языков C/C++ подавить предупреждение или замечание компилятора, относящееся к исходному тексту программы и имеющее номер <id>. Опция имеет самый низкий приоритет

Базовые опции оптимизаций
Компилировать без оптимизаций Эквивалентно -O0 Минимальный уровень оптимизаций. Включает только локальные платформо-независимые оптимизации Более высокий уровень оптимизаций, сбалансированный по времени компиляции, производительности и размеру кода. Включает в себя оптимизации уровня -О1 и основные платформо-зависимые оптимизации Ещё более высокий уровень оптимизаций, нацеленный на получение высокой производительности. Включает в себя оптимизации уровня -О2 и агрессивные платформо-зависимые оптимизации, которые могут приводить к значительному росту размера кода Максимальный уровень оптимизаций. Эквивалентно -O3 -fno-gos-solver Эквивалентно -O2 Эквивалентно -O2 Эквивалентно -O2 Эквивалентно -O3 -ffast-math -fstack-arrays (последнее - если не подана опция -fmax-stack-var-size) Включение решателя для выбора оптимальной линейки оптимизаций в зависимости от свойств процедуры. Позволяет уменьшить время компиляции и размер кода, а в некоторых случаях и время исполнения. Для его включения обычно достаточно подать опцию -O3. По сути, это некоторый искусственный интеллект, который умеет подбирать для каждой функции один из 4 наборов оптимизаций: 3 набора уровня -O3, и 1 набор уровня -O2. В этом состоит принципиальное различие работы опций -O* в компиляторах gcc и lcc. В gcc опция -O* - это просто набор опций, включающих отдельные оптимизации; и если, например, необходимо в режиме -O1 включить оптимизацию unroll, до для этого достаточно подать опцию -funroll-loops. Т.е. можно сказать, что в gcc существует единственная линейка оптимизаций, и подавая опции можно включать и отключать отдельные оптимизации. В компиляторе lcc есть множество линеек оптимизаций, и опциями можно отключать оптимизации в текущей линейке, но нельзя включать оптимизации, которых в линейке нет; например, в режиме -O1 подача опции -funroll-loops не включает оптимизацию unroll, поскольку её нет в соответствующей линейке. Решатель отключается в режиме -fprofile-use. Для его принудительного включения в этом режиме необходимо подать дополнительную опцию -fgos-profile. Для задания линейки оптимизации для конкретной функции можно использовать __attribute__((optimize("-O*"))). Если подать в этот атрибут опцию -O3, то для данной функции включается решатель. Если подать -O4, то решатель для данной функции отключается, и выбирается линейка уровня -O3. Посмотреть выбранный решателем уровень оптимизации можно с помощью опции -fopt-report. Режим по умолчанию: -fno-gos-solver Разрешить использовать решатель в режиме -fprofile-use Использовать режим -Osize для компиляции холодных процедур

Опции профилирования
Загрузить данные профилирования из файла <file> (по умолчанию eprof.sum) Генерировать код программы для получения профиля в каталоге <path> (по умолчанию в текущем каталоге) Генерировать код программы, использующей распараллеливание для получения профиля в каталоге <path> (по умолчанию в текущем каталоге) Генерировать код программы для получения профиля в при сборке ядра Опция устарела и будет удалена в следующей версии компилятора.Вместо неё следует использовать -fprofile-generate-kernel Заменить имя считанного из профиля файла <old_module_name> на указанное имя <new_module_name> Выдать ошибку при отсутствии в профиле информации для файла, поданного в командной строке Включить режим профилирования значений переменных Данные процедуры не будут инструментироваться, профиль для них не будет загружаться Данные модули не будут инструментироваться, профиль для них не будет загружаться Инструментирвоаться будут только файлы, подходящие под указанный шаблон Файлы, подходящие под заданные шаблоны не будут инструментирвоаться, их профили не будут загружаться

Опции режима  вся программа""
Включает режим компиляции "вся программа". При компиляции исходного кода с этой опцией компилятор генерирует EIR (одно из промежуточных представлений lcc) и записывает его в специальную секцию объектного файла. На стадии линковки компилятор объединяет эти секции и компилирует их так, словно это одна единица трансляции. Эта опция обязательно должна подаваться не только на стадии компиляции, но и на финальной линковке. Например: lcc -O3 -fwhole foo.c -c lcc -O3 -fwhole bar.c -c lcc -O3 -fwhole foo.o bar.o -o myprog В данном примере первые два запуска lcc записывают бинарное представление EIR в специальную секцию объектных файлов foo.o и bar.o. Последний запуск lcc читает EIR из foo.o и bar.o, объединяет представление и компилирует его как один модуль. Это позволяет более эффективно проводить межпроцедурные анализы и оптимизации. Например, можно выполнять inline-подстановку функций из foo.c в bar.c и наоборот. Также, компилятор видит все места вызова функций и использования глобальных переменных, и за счёт этого может более эффективно определить независимость обращений к памяти. Другой (более простой) способ использования опции: lcc -O3 -fwhole foo.c bar.c -o myprog Важно помнить о том, что линковка должна запускаться через драйвер lcc. При этом оптимизационные опции должны подаваться на стадии линковки; исключение составляют следующие опции, наличие которых записывается в EIR индивидуально для каждой функции: -faligned, -fassociative-math, -frounding-math, -fforce-delin. Проще всего запомнить следующее правило: опция -fwhole и все оптимизационные опции должны подаваться как при компиляции, так и при линковке через драйвер lcc. В режиме -fwhole можно объединять модули, написанные на разных языках: lcc -O3 -fwhole foo.c -c l++ -O3 -fwhole bar.cc -c lfortran -O3 -fwhole baz.f90 -c l++ -O3 -fwhole foo.o bar.o baz.o -lfcc -o myprog Обратите внимание на то, что финальная линковка делается через l++, чтобы подключить библиотеки поддержки C++, и подаётся опция -lfcc, чтобы подключить библиотеки поддержки Fortran. Опция -fwhole требует, чтобы на компиляцию подавалась вся программа, включая функцию main. Область видимости всех глобальных переменных и функций понижается, и они становятся недоступными извне. По этой причине режим -fwhole не подходит для сборки библиотек (как статических, так и динамических) - опцию запрещено использовать совместо с -fPIC, -fPIE и -shared. Для сборки динамических библиотек следует использовать опцию -fwhole-shared. Опция -fwhole несовместима с некоторыми gnu-расширениями, влияющими на процесс линковки. Включает межмодульные оптимизации и анализы в режиме -fPIC или -shared. Опция экспериментальная и сейчас корректность её работы не гарантируется. Отличие от опции -fwhole состоит в том, что область видимости глобальных переменных и функций не понижается. Также, не требуется наличие всей программы. Это делает возможным использование опции для сборки динамических библиотек. Важно помнить о том, что по умолчанию в режиме -fPIC реализация функции может быть переопределена снаружи библиотеки, из-за чего практически все межпроцедурные оптимизации и анализы невозможны. Поэтому опцию -fwhole-shared имеет смысл использовать только совместно с -fvisibility=protected. Пример использования: lcc -O3 -fwhole-shared -fPIC -fvisibility=protected -c foo.c lcc -O3 -fwhole-shared -fPIC -fvisibility=protected -c bar.c lcc -O3 -fwhole-shared -fPIC -fvisibility=protected -c baz.c lcc -O3 -fwhole-shared -fPIC -shared -o libexample.so foo.o bar.o baz.o -lc Важной особенностью опции -fwhole-shared является то, что она работает только совместно с опциями -fPIC или -shared, а без них игнорируется. Это сделано для того, чтобы было удобно собирать библиотеки. Обычно библиотека собирается запуском команды make, при этом на выходе одновременно получается как статическая, так и динамическая библиотеки, причём задать разные опции для них обычно затруднительно. Если к такому запуску добавить опцию -fwhole, то файлы *.o, из которых будет собрана статическая библиотека, в реальности будут файлами с EIR, в то время как требуются файлы с кодом. Опция -fwhole-shared подходит для таких сценариев - в статическую библиотеку попадёт оптимизированный код (без межмодульных оптимизаций), а динамическая библиотека будет собрана с межмодульными оптимизациями. Опция -fwhole-shared несовместима с некоторыми gnu-расширениями, влияющими на процесс линковки.

Опции пиковой производительности
Включить версию оптимизации Black Hole по счётчикам Включить вероятностную версию оптимизации Black Hole и установление пороговой вероятности для нее [0.0-1.0] Отключить оптимизацию Loop Blocking - разрезание циклов с многократным обходом одинаковых участков памяти с целью оптимизации использования кэш-памяти Отключить оптимизацию Loop Jam - слияние независимых смежных циклов с одинаковым количеством итераций Отключить расширенную версию программной конвейеризации циклов (SoftWare Pipeline) Отключить оптимизацию Scalar Replacement - сбор межитерационных общих подвыражений Отключить оптимизацию удаления избыточных индуктивных переменных Отключить оптимизацию удаления избыточных вещественных индуктивных переменных Отключить оптимизацию векторизации вычислений Использовать безопасный способ векторизации невыровненных чтений Отключить оптимизацию Loop Unroll - раскрутка цикла Отключить оптимизацию Loop Unroll Jam - раскрутка цикла Отключить оптимизацию частичной раскрутки циклов. Оптимизация частичной раскрутки циклов в ациклической части тела цикла выделяет небольшое подмножество наиболее горячих узлов, содержащее голову цикла и хотя бы один узел цикла с переходом по обратной дуге, и такое, что для каждого его узла хотя бы один предшественник и хотя бы один преемник принадлежат этому подмножеству. Если выделенная часть пригодна для дублирования и не содержит вызовов, то производится раскрутка выделенной части цикла. Оптимизация включена по умолчанию и применяется только на статическом профиле. Отключить оптимизацию Loop Reroll - скрутка цикла Включить оптимизацию Loop Reverse - разворот цикла Отключить оптимизацию Loop Nesting - вынос маловероятных участков из цикла с созданием объемлющего цикла Отключить оптимизацию Loop Peeling - вынос вверх нескольких первых итераций малоитерационного цикла Отключить оптимизацию Loop 2 Scalar - преобразования цикла в скалярный код Отключить оптимизацию Loop Unswitching - расщепление цикла по инвариантному условию Отключить оптимизацию Loop Clustering - перенос вычислений, находящихся в цикле под неинвариантным условием, в дополнительный цикл Отключить оптимизацию Loop Permute - перестановка циклов в гнезде по уровню вложенности Отключить оптимизацию Loop Invariant Code-Motion - вынос инвариантных вычислений из цикла Отключить преобразование беззнаковых счетчиков циклов в знаковые Отключить оптимизацию Advanced Scalar Replacement - вынос переменных из циклов Отключить оптимизацию Loop Reroll - перевод на регистры объектов цикла, распределенных в память Отключить оптимизацию Global Copy Propagation - уменьшения глобально живущих объектов Отключить оптимизацию Loop Run-Time Memory Disambiguation - динамический разрыв зависимостей по памяти в цикле Отключить оптимизацию Scalar RTMD - динамических разрыв блоков зависимостей по памяти на линейном участке Отключить оптимизацию switch'ей Включить оптимизацию выноса векторного инварианта. Может использовать для своей работы значительное количество памяти на стеке, что может потребовать увеличения лимита на стек для нормального исполнения программы. Отключить генерацию комбинированных операций Отключить оптимизацию расположения массивов в памяти Отключить генерацию операций merge на поздних фазах компиляции. Оптимизация позволяет объединить две пересылки значений в один и тот же объект, исполняющихся под разными условиями, в одну трёхаргументную операцию выбора merge. Это позволяет сэкономить исполнительные устройства, и в отдельных случаях получить от этого выгоду. Оптимизация включена по умолчанию. Отключить использование глобальных регистров. Данная опция включается в режиме -fkernel. Включить механизм программной предподкачки данных для неконвейеризованных циклов. Работает для тех чтений, к которым не применилась аппаратная предподкачка. Режим по-умолчанию -fprefetch для архитектуры Эльбрус, -fno-prefetch для архитектуры SPARC Отключить технику программной предварительной подкачки данных Задать задержку для операций чтения из памяти Задать время в тактах микропроцессора, необходимое на подкачку данных из оперативной памяти в кэш L2 Установить ограничение на максимальный размер линейного участка (по умолчанию 290 операций) [8-65535] Задать эвристику для подстановки функций - коэффициент увеличения интенсивности подстановки [0.1-20.0] Задать эвристику для подстановки функций - коэффициент увеличения основных ресурсных ограничений [0.1-5.0] Задать эвристику для подстановки функций - максимальный размер вероятного региона процедуры для частичной подстановки Включить безусловную подстановку функций со спецификатором inline. В режиме по умолчанию компилятор сам принимает решение о том, inline-подстановки каких конкретно функций выполнять. Спецификатор inline на этот выбор не влияет. Принудительная inline-подстановка выполняется только для функций, помеченных __attribute__((always_inline)). При наличии данной опции принудительная inline-подстановка выполняется в том числе и для функций, имеющих спецификатор inline. Данная опция является потенциально опасной, особенно в случае языка C++, в котором спецификатор inline включается автоматически для всех методов классов, реализованных в заголовочном файле. Эта опция может привести к чрезвычайно агрессивной работе inline, значительному замедлению компиляции и увеличению размера кода программы, выдаче ошибок компиляции (например, из-за нехватки памяти) и к последующим ошибкам линковки (например, из-за слишком большого размера кода). Выполнять подстановку только для функций с явным модификатором inline Включить расширенную версию оптимизации Scalar Replacement - сбор межитерационных общих подвыражений Понизить уровень оптимизации для процедур, некритичных по профилю задачи Понизить уровень оптимизации для процедур, некритичных по профилю задачи, с заданием порога срабатывания Включить оптимизации расположения данных в памяти для структур. Оптимизация работает только в режиме -fwhole. Также, желательно использовать профильную информацию (опция -fprofile-use). Опция экспериментальная, корректность её работы не гарантируется. Включить оптимизации расположения данных в памяти для массивов Включить оптимизации расположения данных в памяти (эквивалентно -fstruct-reorg -farray-reorg) Включить оптимизацию Call Under Condition для внесения вызовов pure функций под условие. Если результат вызова некоторой pure функции используется только под условием, то данная оптимизация переносит вызов функции под это условие, чтобы уменьшить количество вызовов функции. Под pure здесь подразумеваются либо функции, явно помеченные __attribute__((pure)), либо функции, для которых компилятор определил отсутствие побочных эффектов и как бы навесил __attribute__((pure)). Включает опцию -fipa-attrs, по которой включается анализ функций на наличие побочных эффектов. Включить оптимизацию Constant Propagation для статических массивов Включить оптимизацию Constant Propagation для адресов глобальных объектов Включить оптимизацию Constant Propagation для глобальных переменных, которые изменяются под невыполнимым условием Включить преобразование локальных объектов процедуры main в глобальные Включить межпроцедурный анализ зависимостей указателей Выключить межпроцедурные анализы указателей Включить межпроцедурный анализ указателей и функций Включить межпроцедурный анализ указателей и функций, межпроцедурное распространение констант Включить оптимизацию вызовов функций memset, memcpy, memmove Разрешить удалять, перемещать и заменять на выделение стека вызовы функций malloc, free и им подобных Разрешить преобразования стандартных функций выделения/освобождения памяти. При этом подразумевается, что они имеют обычную реализацию, т.е. не переопределены пользователем. Кроме того, подразумевается, что программе не требуется обработка исключительной ситуации, вызванной нехваткой памяти. При подаче этой опции компилятор: - считает, что функция malloc никогда не возвращает NULL - считает, что оператор new/new[] не бросает исключение в случае нехватки памяти - считает, что free/delete/delete[] корректно обрабатывает NULL (стандартное поведение - ничего не делать в случае нулевого указателя) - удаляет проверку на NULL указателя, полученного в результате вызова new/new[]/malloc - заменяет вызовы new/new[] на malloc (не влияет на вызов конструктора) - заменяет вызовы delete/delete[] на free (не влияет на вызов деструктора) - может выдавать ошибку, если обнаружена пользовательская реализация функций new/new[]/delete/delete[]/malloc/free Если хотя бы одно из указанных выше условий не выполняется, либо пользователь переопределил одну из вышеупомянутых функций, использование опции -ffast-mem может привести к некорректному поведению программы. Если же все условия выполняются, то данная опция позволяет ускорить выделение/освобождение памяти. Кроме того, компилятор взводит опцию -fmalloc-opt, позволяющую дополнительно оптимизировать выделение/освобождение памяти в некоторых случаях. Включить расширенную версию оптимизации оператора switch Разрешить оптимизации на основе предположения о невыходе за границы диапазона целого знакового типа при выполнении операций над знаковыми целыми Запретить оптимизации на основе предположения о невыходе за границы диапазона целого знакового типа при выполнении операций над знаковыми целыми Отложенное применение оптимизации loop fusion Включить оптимизацию разбиения цикла по условию. Оптимизация разбиения цикла цикла по условию разбивает цикл, в котором есть ветвление с независимыми ветками, на несколько независимых циклов. Оптимизация выключена по умолчанию. Использование опции может приводить к исчерпанию стека. Принудительно делинеаризовать массивы C по подобию Фортран 77 Снять ограничение по коду для оптимизации Run-Time Memory Disambiguation Отключить проверки эффективности применения оптимизации расщепления цикла по индексу Снять ограничение на максимальное количество обрабатываемых пар для оптимизации Run-Time Memory Disambiguation Включить принудительную раскрутку всех циклов [1-8] Коэффициент увеличения основных ресурсных ограничений Loop Unroll [0.1-8.0] Включить принудительную векторизацию циклов Включить принудительное выравнивание операций обращения к памяти в циклах Отключить межпроцедурную пропагацию констант и клонирование Отключить клонирование процедур Задать количество вариантов вызова функций по имени при замене с вызова по указателю [1-10] Максимальное количество итераций цикла, при котором возможна открутка пролога в ковейеризованном цикле Игнорировать модификаторы restrict для заданных процедур Параметры функций типа указатель трактовать как с модификатором restrict Все указатели внутри процедуры трактовать как с модификатором restrict Включить более агрессивный анализ зависимостей для restrict-указателей. По умолчанию зависимости разрешаются только между простыми обращениями к памяти, например, такими: *p = a[i]; и только если одно из обращений к памяти выполняется по restrict-указателю, а другое - по произвольному имени либо по любому другому указателю. Данная опция позволяет разрешить зависимости между простым обращением к памяти по restrict-указателю и всеми остальными (сколь угодно сложными) обращениями к памяти. Это может привести к некорректному поведению программы в случае нетривиальных обращений к памяти по restrict-указателю. По умолчанию restrict позволяет разрешить зависимости только между инструкциями, пришедшими из одной функции исходной программы. Если в коде есть инструкции, подставленные inline'ом из разных функций, то зависимости между ними не разрешаются за счёт подсказок restrict. Опция -frestrict-unsafe снимает данное ограничение. Это может привести к некорректному поведению программы в случае передачи restrict-указателя в вызов функции, который подставляется inline'ом. Данная опция является потенциально опасной, поскольку проверка накладываемых ей ограничений на исходный код программы может быть нетривиальной. Запретить оптимизацию понижения силы операций Включить печать параллелизма операций Включить печать о результатах планирования конвейеризованных циклов Учитывать при анализе цикловых зависимостей, что шаг адреса операции обращения в память может быть нулевым. Опция включена по умолчанию. С помощью опции -fno-zero-strides можно разрешить анализу цикловых зависимостей считать, что шаг адреса операции обращения в память никогда не окажется нулевым, однако данный режим является экспериментальным и не гарантирует корректное поведение программы. Включить автоматическое распараллеливание. Данная опция игнорируется при одновременной подаче с ней опции -fopenmp. Количество потоков, на которое параллелить программу Применить автоматическое распределение памяти по узлам NUMA-машины совместно с автоматическим распараллеливанием Применить автоматическое распределение памяти по узлам для комплекса с распределённой памятью совместно с автоматическим распараллеливанием Задать пороговое значение вероятности исполнения линейного участка для проведения дополнительных оптимизаций распределения регистров [0.0-1.0] Оптимизировать процедуры с вызовами setjmp Включить (отключить) Loop Counter Versioning Разрешить замену передачи параметров в функции по указателю на передачу по значению, если по адресу, на который указывает данный параметр, ничего не пишется и он передается дальше только в процедуры, которые тоже ничего не пишут по этому адресу. Оптимизация работает только в режиме -fwhole. Данная опция включена по умолчанию начиная с уровня -O2. Игнорировать вызовы getenv(name), всегда возвращая нулевой указатель на информацию об окружении, ассоциированную со строкой name

Опции, которые могут приводить к неточным преобразованиям
Включает опции -fstdlib, -faligned, -fno-math-errno, -fno-signed-zeros, -ffinite-math-only, -fno-rounding-math, -fcx-limited-range. -fprefetch, -fmalloc-opt, -floop-apb-conditional-loads, -fstrict-aliasing, -fext-strict-aliasing, -fipa-attrs. Данная опция выключена по умолчанию, поскольку включает преобразования с вещественной арифметикой, которые могут приводить к некорректным результатам в случае программ, предполагающих строгое соблюдение стандартов IEEE или ISO для вещественных операций и функций. Тем не менее, она может существенно увеличить скорость программ, не требующих строго соблюдения этих стандартов. Кроме того, опция включает некоторые потенциально опасные оптимизации (такие как loop-apb для чтений под условием, malloc-opt, удаление операций целочисленного деления), которые в определённых случаях могут приводить к некорректному поведению программы. Разрешить менять местами аргументы в цепочках вещественных операций. Это нарушает стандарт ISO языков C/C++ и может привести к изменению результата вычислений. Это также может привести к изменению знака нуля, игнорированию NaN-ов, потере или возникновению переполнения или антипереполнения (underflow). Может менять порядок аргументов сравнений, поэтому не должна использоваться в случае, когда такой порядок важен. Для успешной работы требует взведения следующих опций: -fno-signed-zeros, -ffinite-math-only, -fno-rounding-math. Эти опции взводятся в режимах -ffast и -ffast-math. Режим по-умолчанию -fno-associative-math. При замене вызова математической функции на встроенную реализацию учитывать (не учитывать) её спецификацию по работе с errno Включает опции -fassociative-math, -fno-signed-zeros. Данная опция выключена по умолчанию, поскольку включает преобразования с вещественной арифметикой, которые могут приводить к некорректным результатам в случае программ, предполагающих строгое соблюдение стандартов IEEE или ISO для вещественных операций и функций. Тем не менее, она может существенно увеличить скорость программ, не требующих строго соблюдения этих стандартов. Режим по-умолчанию -fno-unsafe-math-optimizations. Разрешить преобразования с вещественной арифметикой, приводящие к возможному изменению точности. Включает опции -funsafe-math-optimizations, -ffinite-math-only, -fno-signaling-nans, -fno-rounding-math, -fno-math-errno, -fcx-limited-range. Данная опция выключена по умолчанию, поскольку включает преобразования с вещественной арифметикой, которые могут приводить к некорректным результатам в случае программ, предполагающих строгое соблюдение стандартов IEEE или ISO для вещественных операций и функций. Тем не менее, она может существенно увеличить скорость программ, не требующих строго соблюдения этих стандартов. Разрешить (запретить) оптимизации, предполагающие, что не будет работы с NaN'ами и Inf'ами Запретить (разрешить) оптимизации, предполагающие, что вещественные особые ситуации типа деления на 0 можно игнорировать Запретить преобразования и оптимизации, предполагающие использование режима округления по-умолчанию. Это округление к нулю во всех преобразованиях вещественных чисел в целочисленные, и округление к ближайшему целому для всех остальных арифметических усечений. Эту опцию необходимо подавать при компиляции программ, которые могут динамически менять режим округления, либо которые могут исполнятся в режиме округления, отличном от принятого по-умолчанию. Режим по-умолчанию -fno-rounding-math. Данная опция является экспериментальной и в настоящий момент не гарантирует отключение всех оптимизаций, на которые может повлиять режим округления. При оптимизациях учитывать (не учитывать) различия между +0.0 и -0.0 Запретить оптимизации, предполагающие, что параметром функции не может быть неинициализированная переменная Разрешить (запретить) упрощённое построение операций комплексного умножения и деления Разрешить (запретить) упрощённое построение операций комплексного умножения и деления по правилам языка Фортран Эквивалентно -fassociative-math -fno-rounding-math Эквивалентно -fno-associative-math -frounding-math -ffp-contract=off отключает использование вычислений без промежуточного округления. -ffp-contract=fast включает использование вычислений без промежуточного округления, если целевая архитектура поддерживает операции, выполняющие такие вычисления. -ffp-contract=on включает использование вычислений без промежуточного округления, если это разрешено стандартом языка; в настоящее время данное значение опции не поддержано и интерпретируется как -ffp-contract=off. По умолчанию -ffp-contract=off

Опции работы с sanitizer'ами
Включить (выключить) sanitizer'ы <san1>, <san2>, ...

Расширенные опции управления процессом компиляции
Добавить префикс поиска исполняемых компонент, заголовочных файлов, библиотек и crt-модулей Передать опции <opt1> <opt2> ... напрямую ассемблеру Передать опции <opt1> <opt2> ... напрямую компилятору Передать опции <opt1> <opt2> ... напрямую линкеру и трактовать их как файлы Передать опции <opt1> <opt2> ... напрямую линкеру в конец строки (актуально для стадии линковки режима -fwhole) Передать опции <opt1> <opt2> ... напрямую препроцессору Эквивалентно опции -Wl,<opt1>,<opt2>... Прямо специфицирует язык <lang> последующих входных файлов (даже если компилятор может выбрать язык на основании суффикса имени файла). Эта опция действует на все входные файлы вплоть до следующего появления опции -x. Возможными значениями для языка являются: c, c-header, cpp-output, c++, c++-header, c++-cpp-output, f77, f77-cpp-input, f95, f95-cpp-input, assembler, assembler-with-cpp Опция -x none выключает любое указание языка так, что последующие файлы обрабатываются в соответствии с суффиксами имен файлов (как если бы -x вовсе бы не указывалось). Прочитать опции из файла <file>

Опции управления линковкой
Опция, обратная к -dynamic. Добавить <dir> к списку директорий для поиска библиотек Линковать с библиотекой <name> Не линковать с библиотеками по умолчанию Не линковать со стартовыми модулями по умолчанию Эквивалентно комбинации опций -nodefaultlibs и -nostartfiles Линковать до позиционно-независимого исполняемого файла Создать relocatable object Вывести все символы в динамическую таблицу символов Создать динамическую библиотеку Принудительно использовать динамическую версию libgcc Принудительно использовать статическую версию libgcc Принудительно использовать статическую версию libstdc++ Принудительно использовать статическую версию libgfortran Передать в линкер опцию -Bsymbolic

Опции передаются линкеру

Опции печати и настройки конфигурации
Вывести внутреннюю версию компилятора. Опция сделана по аналогии с gcc. В gcc опция -dumpversion предназначена для того, чтобы её распознавать в автоматическом режиме всякими системами автоконфигурации. А опция --version для того, чтобы читать глазами. Такое же и отличие от опции -print-version, которая предназначена для автоматического разбора (но уже теми программами, которые изначально писались под lcc, а не под gcc). Печатать название целевой машины Вывести номер версии gcc, с которой совместим данный компилятор. Имеется в виду, аналогом какой версии gcc является lcc. Многие программы, ориентированные на использование gcc по опции проверяют версию gcc (чтобы включить или не включить поддержку тех или иных конструкций, которые понимаются или не понимаются разными версиями gcc). Печатать название целевой режима Печатать путь до указанного неисполняемого файла Печатать путь до указанного исполняемого файла Печатать пути поиска Печатать путь до libgcc.a Печатать версию компилятора Эмулировать конфигурацию <target-build> в части работы с внутренним каталогом Печатать домашний каталог компилятора Установить домашний каталог компилятора Печатать путь до корня файловой системы, в которой ведётся поиск binutils Установить путь до корня файловой системы, в которой ведётся поиск binutils Установить путь до корня файловой системы, в которой ведётся поиск системных библиотек в момент компиляции и дополнительно передать опцию --sysroot=<dir> линкеру. Файловая система должна быть эквивалентна той, что установлена на машине в момент исполнения кода Печатать путь до корня файловой системы, в которой ведётся поиск системных библиотек в момент компиляции Эквивалентно --sysroot <dir>, но только в объёме поиска include-файлов Эквивалентно -print-config=all Напечатать значение текущего конфигурационного параметра <name>. Параметр опции может принимать следующие значения: all, target-arch, target-os, target-build, cross-compiler, version, gcc-version, build-date, home-dir, binutils-dir, fs-dir, rfs-dir. Опция используется при сборке библиотек run-time поддержки и при сборке дистрибутива. Конечному пользователю использовать опцию не рекомендуется (но не запрещается), т.к. поведение опции может меняться при изменении версии компилятора Эквивалентно -print-mode=all Напечатать значение текущего режимного параметра <name>. Параметр опции может принимать следующие значения: all, cpu, ptr, libc. Опция используется при сборке библиотек run-time поддержки и при сборке дистрибутива. Конечному пользователю использовать опцию не рекомендуется (но не запрещается), т.к. поведение опции может меняться при изменении версии компилятора Эквивалентно -print-internal-dir=all Напечатать значение текущего внутреннего каталога <name>. Параметр опции может принимать следующие значения: all, base, bin, lib, include, include-c++, include-c++-stl, fccn-include, fccn-mod, il. Опция используется при сборке библиотек run-time поддержки и при сборке дистрибутива. Конечному пользователю использовать опцию не рекомендуется (но не запрещается), т.к. поведение опции может меняться при изменении версии компилятора Печатать установленные переменные окружения, влияющие на работу компилятора

Опции для повторения внутренних свойств gcc
Таблицу переходов switch'а помещать в секцию .text При агрегатном копировании [размером не менее <size> байт] вместо цикла использовать вызов функции memcpy

Игнорируемые опции (для совместимости с gcc)

Игнорируемые опции (для совместимости с прошлыми версиями lcc)
Опция устарела и будет удалена Опция устарела и будет удалена Опция устарела и будет удалена Опция устарела и будет удалена

Поддерживаемые переменные окружения
Настройка каталога для временных файлов Дополнительные пути поиска заголовочных файлов Дополнительные пути поиска заголовочных файлов языка C Дополнительные пути поиска заголовочных файлов языка C++ Значение должно иметь формат "file[ name]"; то же, что и -MMD -MF file -MT name Значение должно иметь формат "file[ name]"; то же, что и -MD -MF file -MT name Дополнительные пути поиска библиотек Определяет язык выдачи сообщений Определяет язык выдачи сообщений Определяет язык выдачи сообщений Эквивалетно наличию опции @ в конце командной строки Задаёт настройки цвета для цветовой подсветки сообщений. Пустое значение отключает цветовую подсветку сообщений Если выставлено в значение "dumb", то отключает цветовую подсветку сообщений Задаёт каталог для сброса/чтения профильной информации. Имеет приоритет над каталогом, заданным опциями -fprofile-generate и -fprofile-use При установке в значение "1" код, собранный в режиме -fprofile-generate, сбрасывает профильную информацию в каталог исполняемого файла. Имеет приоритет над каталогом, заданным опцией -fprofile-generate