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>. Параметр опции может принимать следующие значения: elbrus-2c+, elbrus-4c, elbrus-8c, elbrus-1c+, elbrus-8c2, elbrus-12c, elbrus-16c, elbrus-2c3. При одновременном наличии в командной строке опций -mtune, -march и/или -mcpu, во внимание принимается только опция -mtune, а опции -march и/или -mcpu игнорируются -mtune=elbrus-2c+ - компилировать программу для процессора "Эльбрус-2C+" (работающего на системе команд v2). Программы, скомпилированные в таком режиме, работают более эффективно на процессоре "Эльбрус-2C+", но могут вызывать проблемы при исполнении на других процессорах. Поэтому при помощи специального маркера в бинарном файле такие программы защищаются от исполнения на других процессорах -mtune=elbrus-4c - компилировать программу для процессора "Эльбрус-4C" (работающего на системе команд v3). Программы, скомпилированные в таком режиме, работают более эффективно на процессоре "Эльбрус-4C", но могут вызывать проблемы при исполнении на других процессорах. Поэтому при помощи специального маркера в бинарном файле такие программы защищаются от исполнения на других процессорах -mtune=elbrus-8c - компилировать программу для процессора "Эльбрус-8C" (работающего на системе команд v4). Программы, скомпилированные в таком режиме, работают более эффективно на процессоре "Эльбрус-8C", но могут вызывать проблемы при исполнении на других процессорах. Поэтому при помощи специального маркера в бинарном файле такие программы защищаются от исполнения на других процессорах -mtune=elbrus-1c+ - компилировать программу для процессора "Эльбрус-1C+" (работающего на системе команд v4). Программы, скомпилированные в таком режиме, работают более эффективно на процессоре "Эльбрус-1C+", но могут вызывать проблемы при исполнении на других процессорах. Поэтому при помощи специального маркера в бинарном файле такие программы защищаются от исполнения на других процессорах -mtune=elbrus-8c2 - компилировать программу для процессора "Эльбрус-8C2" (работающего на системе команд v5). Программы, скомпилированные в таком режиме, работают более эффективно на процессоре "Эльбрус-8C2", но могут вызывать проблемы при исполнении на других процессорах. Поэтому при помощи специального маркера в бинарном файле такие программы защищаются от исполнения на других процессорах -mtune=elbrus-12c - компилировать программу для процессора "Эльбрус-12C" (работающего на системе команд v6). Программы, скомпилированные в таком режиме, работают более эффективно на процессоре "Эльбрус-12C", но могут вызывать проблемы при исполнении на других процессорах. Поэтому при помощи специального маркера в бинарном файле такие программы защищаются от исполнения на других процессорах -mtune=elbrus-16c - компилировать программу для процессора "Эльбрус-16C" (работающего на системе команд v6). Программы, скомпилированные в таком режиме, работают более эффективно на процессоре "Эльбрус-16C", но могут вызывать проблемы при исполнении на других процессорах. Поэтому при помощи специального маркера в бинарном файле такие программы защищаются от исполнения на других процессорах -mtune=elbrus-2c3 - компилировать программу для процессора "Эльбрус-2C3" (работающего на системе команд v6). Программы, скомпилированные в таком режиме, работают более эффективно на процессоре "Эльбрус-2C3", но могут вызывать проблемы при исполнении на других процессорах. Поэтому при помощи специального маркера в бинарном файле такие программы защищаются от исполнения на других процессорах -mtune=native - для native-компилятора включить режим -mtune со значением, соответствующим модели процессора, на котором в настоящий момент запускается компилятор. Для cross-компилятора включить режим компилятора по умолчанию в отношении настройки target-процессора Формировать код для системы команд <arch>. Параметр опции может принимать следующие значения: elbrus-v2, elbrus-v3, elbrus-v4, elbrus-v5, elbrus-v6. При одновременном наличии в командной строке опций -march и -mtune, опция -march игнорируется. При одновременном наличии в командной строке опций -march и -mcpu, во внимание принимается только опция -march, а опция -mcpu игнорируется Системы команд процессоров семейства "Эльбрус" с точки зрения совместимости можно выстроить в следующем порядке: "система команд v2" - "система команд v3" - "система команд v4" - "система команд v5" - "система команд v6". Программы, скомпилированные в более ранней системе команд (согласно этой линейке слева направо), смогут исполняться на процессорах с более поздней системой команд. Программы, скомпилированные в более поздней системе команд, НЕ смогут исполняться на процессорах с более ранней системой команд (операционная система не позволит эти программы запустить). Новые процессоры, которые могут появиться в будущем, в цепочку становятся с правой стороны -march=elbrus-v2 - компилировать программу под систему команд v2. Программа сможет исполняться на процессорах с системой команд v2 и выше -march=elbrus-v3 - компилировать программу под систему команд v3. Программа сможет исполняться на процессорах с системой команд v3 и выше -march=elbrus-v4 - компилировать программу под систему команд v4. Программа сможет исполняться на процессорах с системой команд v4 и выше -march=elbrus-v5 - компилировать программу под систему команд v5. Программа сможет исполняться на процессорах с системой команд v5 и выше -march=elbrus-v6 - компилировать программу под систему команд v6. Программа сможет исполняться на процессорах с системой команд v6 и выше -march=native - для native-компилятора включить режим -march со значением, соответствующим модели процессора, на котором в настоящий момент запускается компилятор. Для cross-компилятора включить режим компилятора по умолчанию в отношении настройки target-процессора Устаревшая опция, в будущем может быть удалена. Формировать код для процессора или системы команд <arch>. Параметр опции может принимать следующие значения: elbrus-v2, elbrus-v3, elbrus-v4, elbrus-v5, elbrus-2c+, elbrus-4c, elbrus-8c, elbrus-1c+, elbrus-8c2. При одновременном наличии в командной строке опций -mtune и/или -march и -mcpu, опция -mcpu игнорируются -mcpu=elbrus-v2 - эквивалентно -march=elbrus-v2 -D__elbrus_2cplus__. Лишняя опция -D обусловлена ошибочной настройкой предыдущих версий компилятора. Рекомендуется заменить на -march=elbrus-v2 -mcpu=elbrus-v3 - эквивалентно -march=elbrus-v3 -D__elbrus_4c__. Лишняя опция -D обусловлена ошибочной настройкой предыдущих версий компилятора. Рекомендуется заменить на -march=elbrus-v3 -mcpu=elbrus-v4 - эквивалентно -march=elbrus-v4 -D__elbrus_8c__ -D__elbrus_1cplus__. Лишние опции -D обусловлены ошибочной настройкой предыдущих версий компилятора. Рекомендуется заменить на -march=elbrus-v4 -mcpu=elbrus-v5 - эквивалентно -march=elbrus-v5 -D__elbrus_8c2__. Лишняя опция -D обусловлена ошибочной настройкой предыдущих версий компилятора. Рекомендуется заменить на -march=elbrus-v5 -mcpu=elbrus-2c+ - эквивалентно -march=elbrus-v2 -D__elbrus_2cplus__. Лишняя опция -D обусловлена ошибочной настройкой предыдущих версий компилятора. Рекомендуется заменить на -mtune=elbrus-2c+ или -march=elbrus-v2 -mcpu=elbrus-4c - эквивалентно -march=elbrus-v3 -D__elbrus_4c__. Лишняя опция -D обусловлена ошибочной настройкой предыдущих версий компилятора. Рекомендуется заменить на -mtune=elbrus-4c или -march=elbrus-v3 -mcpu=elbrus-8c - эквивалентно -march=elbrus-v4 -D__elbrus_8c__. Лишняя опция -D обусловлена ошибочной настройкой предыдущих версий компилятора. Рекомендуется заменить на -mtune=elbrus-8c или -march=elbrus-v4 -mcpu=elbrus-1c+ - эквивалентно -march=elbrus-v4 -D__elbrus_1cplus__. Лишняя опция -D обусловлена ошибочной настройкой предыдущих версий компилятора. Рекомендуется заменить на -mtune=elbrus-1c+ или -march=elbrus-v4 -mcpu=elbrus-8c2 - эквивалентно -march=elbrus-v5 -D__elbrus_8c2__. Лишняя опция -D обусловлена ошибочной настройкой предыдущих версий компилятора. Рекомендуется заменить на -mtune=elbrus-8c2 или -march=elbrus-v5 Компилировать в режиме 32 бит Компилировать в режиме 64 бит Компилировать в защищённом режиме Компилировать в защищённом режиме до объектного файла, который затем можно подать в линковку в режиме -mptr64 (экспериментальная поддержка)

Опции управления входным языком
Эквивалентно либо -std=c89, либо -std=c++98 (в зависимости от режима компиляции C/C++) Использовать стандарт 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. По умолчанию установлен режим -std=gnu11 В режиме языка C++ параметр может принимать значения: iso9899:2011, gnu11, c++98, gnu++98, c++03, gnu++03, c++0x, gnu++0x, c++11, gnu++11, c++1y, gnu++1y, c++14, gnu++14. По умолчанию установлен режим -std=gnu++98 В режиме языка Fortran параметр может принимать значения: f95, f2003, f2008, gnu, legacy, f2008ts. По умолчанию установлен режим -std=gnu Настроить lcc/l++ на совместимость с gcc версии <version> в отношении входного языка

Опции управления языковыми конструкциями
Разрешать устаревшие конструкции C++ Некоторые ошибки по части устаревших конструкций C++ трактовать, как предупреждения Включить (выключить) поддержку обработки исключительных ситуаций Эквивалентно -fexceptions (-fno-exceptions) В режиме -fexceptions включить (выключить) построение информации о раскрутке стека Эквивалентно -funwind-tables Включить (выключить) поддержку 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 соответствует неограниченной выдаче Опция используется для компиляции библиотеки поддержки C++ времени исполнения Каждая машина имеет настройки по умолчанию - каким должен быть char: таким, как unsigned char или таким, как signed char. В идеале, переносимая программа всегда должна явно использовать unsigned char или signed char, когда она зависит от знаковости объекта. Но многие программы были написаны с использованием простого char в предположении, что он будет либо знаковым, либо беззнаковым, в зависимости от машины, для которой они были написаны. Эта опция и ей противоположная позволяют вам заставить такую программу работать при противоположном умолчании. Тип char всегда отличен и от signed char, и от unsigned char (и это критично для C++), хотя его поведение всегда такое же, как у одного из этих двух типов. В режиме C99 и выше трактовать модификатор inline в терминах языка GNU C89 Разрешать неявное преобразование типов для векторных типов с одинаковымы размерами, но разными базовыми типами В режиме препроцессирования использовать старый стиль препроцессирования Поддерживаются трехсимвольные последовательности ANSI C. Опция -ansi включает -trigraphs В режиме Фортрана 77 указать, что программа не соблюдает стандарт Фортран 77 Поддерживать директивы OpenMP В режиме C++ включить (выключить) встроенные описания void operator delete (void *, std::size_t) noexcept; void operator delete[] (void *, std::size_t) noexcept; Эти описания появились в стандарте C++14, где они поддерживаются по умолчанию, но по опции поддержку можно включить и при использовании более ранних стандартов Эти описания могут быть полезными для пользовательских replacement deallocation функций, которые, например, работают быстрее, если известен размер объекта

Опции управления препроцессированием
Добавить директорию <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++ Установить кодировку входного текста программы Игнорировать во входном файле BOM для UTF-8. В будущих версиях компилятора опция будет удалена

Опции управления режимом компиляции
Разрешить (запретить) замену вызовов некоторых стандартных функций на соответствующие builtin'ы в режиме -fgnu. При включенной опции вызов, например, функции 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>: g0, ..., g31, r0, ..., r63, pred0, ..., pred31 Опция является полным аналогом соответствующей опции gcc Отметить регистр <reg> как портящийся при вызовах. Компилятор при построении операций вызова будет сохранять значение данного регистра, а после операции вызова восстанавливать. Опция используется, например, в системном софте, когда операция вызова происходит нестандартными методами (без переключения регистрового окна и т.п.). Допустимые значения параметра <reg> аналогичны опции -ffixed-<reg> Опция является полным аналогом соответствующей опции gcc Разрешить (запретить) inline-подстановку gnu ассемблерных вставок (только в режиме с оптимизациями) Разрешить (запретить) контроль правильности написания gnu ассемблерных вставок (только в режиме с оптимизациями) Использовать модель данных <dmodel>. Данная опция допустима только для режима -mptr64. Параметр опции может принимать следующие значения: medium, large В режиме -mdmodel=medium компилятор предполагает, что ни статический (грубо говоря, языковая переменная), ни динамический (грубо говоря, результат вызова функции malloc) объект не может иметь размер, превышающий 4 Гб. Данный режим установлен по умолчанию В режиме -mdmodel=large компилятор предполагает, что ограничения на размер в 4 Гб есть только у статических объектов. Динамические объекты могут иметь произвольные размеры Функции <function1>, <function1>, ... принудительно распределить в секцию <section>

Опции отладочной информации
Отключить генерацию отладочной информации Генерировать информацию о номерах строк для дизассемблера Генерировать отладочную информацию Эквивалентно опции -g (для совместимости с gcc) Аналогично -g, но без отключения inline Генерировать отладочную информацию для Фортрана (экспериментальная реализация) Генерировать информацию для дизассемблера о числе малоформатных операций в векторных операциях Добавить дополнительные отладочные печати в ассемблерный файл Включение решателя для выбора оптимальной линейки оптимизаций в зависимости от свойств процедуры. Позволяет уменьшить время компиляции и размер кода Разрешить использовать решатель в режиме -fprofile-use Использовать режим -Osize для компиляции холодных процедур

Дополнительные опции
Включение контроля выравнивания при обращениях в память и разрешение рассчитывающих на это оптимизаций. Есть архитектуры, которые на аппаратном уровне позволяют работать с невыровненными обращениями в память (например, Intel), а есть те, которые не позволяют (например, SPARC). В итоге может получиться так, что программа работает на одной архитектуре и не работает на другой - из-за того, что содержит невыровненные обращения. По умолчанию lcc генерирует код, в котором разрешены невыровненные обращения, а по опции такие обращения будут ломаться на исполнении. Некоторым оптимизациям это свойство критично. Опция, в том числе может быть использована и для внутренней отладки программы, потому как в большинстве случаев наличие невыровненного обращения в память говорит о наличии ошибок в программе при работе с поинтерной арифметикой. При компиляции кода из исходного файла смысл опции -faligned заключается в том, что программист говорит компилятору "я обязуюсь, что в исходнике программы все обращения в память являются выровненными", в результате чего компилятор может более эффективно выполнять оптимизации, критичные к выровненным обращениям в память. При линковке до исполняемого файла опция -faligned говорит компилятору "включи аппаратный run-time контроль, запрещающий невыровненные обращения". Таким образом по сути дела есть две немного разные функциональности, объединённые в одну опцию -faligned. Запретить только полуспекулятивные обращения к памяти. При этом возможно использование чисто спекулятивных обращений (например, с помощью механизма спекулятивности по управлению) Запретить использование спекулятивных операций подготовок переходов Задать режим сборки ядра ОС Linux. Неявно включает опции -fno-strict-aliasing и -fforce-inline. Подразумевается режим запрета прерываний при обработке системных регистров Задать режим сборки системного программного обеспечения (драйверов, Х-серверов и т.д.). Неявно включает опцию -fno-strict-aliasing Отключить использование регистра %ctpr2 для подготовки переходов (необходим в режиме сборки ядра ОС Linux) Включить подстановку функций (включается по опции -O2) Включить более агрессивную подстановку функций (включается по опции -O3) Включить агрессивную подстановку функций в маленькие функции с единстенным вызовом. По умолчанию компилятор самостоятельно решает какие функции лучше подставлять, пытаясь достичь разумного компромисса между увеличением времени компиляции и снижением времени исполнения программы. При этом подставляются в основном небольшие функции. Данная опция включает подстановку функций среднего размера в небольшие функции-обёртки, содержащие единственный вызов функции. Наличие данной опции может привести к дополнительному росту кода и замедлению компиляции. Включить агрессивную подстановку static функций в не-static функции Включить агрессивную подстановку static функций с единственным вызовом Учесть неполную профильную информацию при подстановке функций Отключить подстановку функций Не выдавать ошибку в случае невозможности inline-подстановки функции с атрибутом always_inline Задать режим компиляции вне стандартного окружения. Дополнительно включает -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 Разрешить удалять, перемещать и заменять на выделение стека вызовы функций malloc, free и им подобных Не использовать директивы .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 -ffp-contract=off отключает использование вычислений без промежуточного округления. -ffp-contract=fast включает использование вычислений без промежуточного округления, если целевая архитектура поддерживает операции, выполняющие такие вычисления. -ffp-contract=on включает использование вычислений без промежуточного округления, если это разрешено стандартом языка; в настоящее время данное значение опции не поддержано и интерпретируется как -ffp-contract=off. По умолчанию -ffp-contract=off

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

Опции препроцессирования фортрана
Принудительно использовать (не использовать) предварительное препроцессирование Указать директорию для поиска файлов для "include" и "use" Указать директорию для сохранения и использования информации о модуле

Опции управления языковыми настройками фортрана
Включить поддержку всех встроенных процедур и функций, даже если их может не быть в выбранном стандарте Интерпретировать символ '' как 'C-style' Использовать указатели Cray, что обеспечивает функциональность указателей, как в языке С Трактовать строки, начинающиеся с 'd' или 'D', как исполняемый текст Трактовать строки, начинающиеся с 'd' или 'D', как комментарий Установить размер типа 'double precision' 8 по умолчанию Установить размер типа 'integer' и 'logical' 8 по умолчанию Установить размер типа 'real' 8 по умолчанию Допустить символ '$' в идентификаторе Даные типа integer, объявленные с размером 4, интерпретировать как целые размера 8 Специфицировать форму исходного файла Установить размер строки <n> для фиксированной формы исходного файла Определить форму исходного файла как свободную независимо от расширения Установить позицию <n> в строке, после которой символы игнорируются Запретить использование переменных без их объявления Установить доступ к объектам модуля по умолчанию как PRIVATE Размещать локальные переменные нерекурсивных процедур как 'static' переменные Не диагностировать ошибки в процессе константных вычислений и в операторе READ Даные типа REAL, объявленные с размером 4, интерпретировать как REAL размера 8 Даные типа REAL, объявленные с размером 4, интерпретировать как REAL размера 10 Даные типа REAL, объявленные с размером 4, интерпретировать как REAL размера 16 Даные типа REAL, объявленные с размером 8, интерпретировать как REAL размера 4 Даные типа REAL, объявленные с размером 8, интерпретировать как REAL размера 10 Даные типа REAL, объявленные с размером 8, интерпретировать как REAL размера 16 Определить стандарт Фортран 95 Определить стандарт Фортран 2003 Определить стандарт Фортран 2008 Определить стандарт Фортран 95 со всеми расширениями GNU и выдывать предупреждения об устаревших расширениях, не рекомендуемых для нового кода Определить стандарт Фортран 95 со всеми расширениями GNU Определить стандарт Фортран 2008, включающий добавления TS 29113 и TS 18508

Опции фортрана, влияющие на генерацию кода
Удалять повторный вызов функции с тем же самым списком аргументов, если он находится внутри того же оператора, неважно, объявлена функция как PURE или нет Выравнивать COMMON-блоки Диагностировать ошибки при выполнении встроенных операций над массивами Настроить run-time проверки Настроить coarray-распараллеливание Конвертировать файлы данных Удалять одинаковые вызововы функций внутри выражения, исключать ненужные вызововы TRIM в сравнениях, замещать TRIM(a) на a(1:LEN_TRIM(a)) Инициализировать локальные переменные типа CHARACTER ASCII символом <n> Инициализировать локальные переменные типа INTEGER числом <n> Инициализировать локальные переменные типа INTEGER, REAL, COMPLEX нулём, типа LOGICAL - значением false, типа CHARACTER - строкой нулевой длины Инициализирует локальные переменные типа LOGICAL указанным значением Инициализирует локальные переменные типа REAL указанным значением Установить лимит количества объектов в конструкторе массива Размещать массивы с размером больше <n> в памяти, а не на стеке Установить максимальный размер подзаписи Размещать автоматически левую часть присваивания, даже если она не была размещена прежде или имела другую форму Установить размер маркера длины записи для неформатированных файлов в <n> (4,8) Размещать локальные переменные на стеке Величину "минус ноль" трактовать и печатать как отрицательную Распределять временные массивы на стеке, если их размер не более <n> байт, иначе в памяти

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

Опции предупреждений C/C++
Игнорируется Игнорируется Игнорируется Предупреждать об игнорировании __attribute__((aligned)), вызывающего уменьшение выравнивания типа Предупреждать об использовании оператора __alignof__, применённого к незавершённому типу Отображать все предупреждения по поводу спорных конструкций, которые могут быть легко модифицированы. Опция является комбинацией опций -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-function, -Wunused-label, -Wunused-local-typedefs, -Wunused-value, -Wunused-variable, -Wvolatile-register-var. В данном случае слово "all" НЕ означает, что будут выдаваться все предупреждения (опция унаследована от gcc с тем же смыслом, что и в gcc). Для получения всех возможных предупреждений пользуйтесь опцией -Wall-warnings Предупреждать о несовместимости типов формальных и фактических параметров в режиме -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 Предупреждать о предположительно ошибочном использовании "=" вместо "==" Предупреждать о некорректном имени атрибута или неприменимости данного атрибута Игнорируется Предупреждать об инициализаторе несоответствующего типа Предупреждать об возврате значения несоответствующего типа Предупреждать об объявлении функций, совпадающих по имени с builtin'ом, но отличающихся прототипом Предупреждать о наличии собственных реализаций библиотечных функций, которые должны раскрываться в режиме -fbuiltin Игнорируется Игнорируется Игнорируется Игнорируется Эквивалентно -Wc++11-compat Игнорируется Игнорируется Игнорируется Игнорируется Игнорируется Предупреждать о вложенных комментариях Эквивалентно -Wcomment Предупреждать об использовании const переменных в местах, где допустимы только const выражения (только в режиме языка C) Предупреждать об управляющих условных выражениях, являющихся константами Предупреждать о constexpr выражениях, которые не могут быть свёрнуты в константу Предупреждать об операциях неявного преобразования типов, которые могут изменить значение. Включает в себя -Wfloat-conversion Игнорируется Игнорируется Игнорируется Эквивалентно -Wbuiltin-declaration-mismatch Игнорируется Предупреждать о deprecated конструкциях Предупреждать об использовании переменной, функции или типа с __attribute__((deprecated)) Предупреждать о позиционной инициализации структуры, объявленной с __attribute__((designated_init)) Предупреждать о делении на ноль Игнорируется Игнорируется Предупреждать о дублирующих описаниях clobber'ов ассемблерной вставки Предупреждать о дублирующих квалификаторах типов Игнорируется Предупреждать о пустой последней альтернативе оператора if Предупреждать о лишнем тексте после препроцессорных директив Предупреждать о сравнении величин различных enum-типов Предупреждать об отсутствии перевода строки в конце файла Предупреждать о переопределении функций extern inline в режиме GNU C Включить дополнительные предупреждения, не включаемые через -Wall. Опция является комбинацией опций -Wclobbered, -Wempty-body, -Wignored-qualifiers, -Wmissing-parameter-type, -Wold-style-declaration, -Wsign-compare, -Wtype-limits, -Wuninitialized, -Wmaybe-uninitialized, -Wunused-parameter. Предупреждать о лишних символах ';' Игнорируется Игнорируется Игнорируется Проверять аргументы вызова некоторых стандартных функций, работающих с форматной строкой. Включает в себя -Wformat-extra-args, -Wnonnull Предупреждать о наличии лишних параметров в вызовах функций с форматной строкой типа printf и scanf Игнорируется Игнорируется Игнорируется Игнорируется Игнорируется Игнорируется Игнорируется Игнорируется Эквивалентно комбинации опций -Wformat, -Wformat-nonliteral, -Wformat-security, -Wformat-y2k Игнорируется Предупреждать о вызове функции, не имеющей прототипа в данном модуле в случае если это может привести к ошибке (начиная с уровня -O1). Работает только в режиме -fwhole Предупреждать об известных директивах #pragma, которые игнорируются в текущем режиме компиляции Предупреждать об игнорируемых квалификаторах Эквивалентно комбинации опций -Wimplicit-int, -Wimplicit-function-declaration Игнорируется Игнорируется Игнорируется Игнорируется Игнорируется Игнорируется Игнорируется Предупреждать о неявных определениях функций (только в режиме языка C) Предупреждать о неявном типе int для декларации функции без описания результата (только в режиме языка C) Пример кода, вызывающего данное предупреждение: func (void) { return 1; } Предупреждать о неявном преобразовании типов для векторных типов с одинаковымы размерами, но разными базовыми типами Игнорируется Предупреждать о невозможности inline-подстановки функций (начиная с уровня -O2) Предупреждать о конфликтах между inline и noinline Игнорируется Предупреждать о преобразовании типа, приводящего к изменению знака целого Предупреждать о некорректных параметрах некоторых builtin-функций (начиная с уровня -O1) Игнорируется Предупреждать о некорректных параметрах известных директив #pragma Предупреждать о некорректном использовании offsetof и __builtin_offsetof (только в режиме языка C++) Предупреждать о переходе через инициализацию Игнорируется Игнорируется Предупреждать о неверном объявлении функции main Предупреждать о возможном возврате из функции адреса автоматической переменной (начиная с уровня -O1) Предупреждать о возможно неинициализированных автоматических переменных (начиная с уровня -O1) Игнорируется Игнорируется Игнорируется Игнорируется Игнорируется Предупреждать об отсутсвии в конструкторе инициализатора для константных или ссылочных полей (только в режиме языка C++) Предупреждать об отсутствии инициализатора у переменной с квалификатором const (только в режиме языка C) Игнорируется Предупреждать об отсутствия типа у параметра функции K&R (только в режиме языка C) Игнорируется Предупреждать о смешивании enum и не-enum типов Предупреждать о наличии multichar литералов Игнорируется Игнорируется Игнорируется Игнорируется Игнорируется Предупреждать о замыкающих запятых, не соответствующих стандарту Предупреждать о невиртуальном деструкторе базового класса Предупреждать о передаче нулевого указателя в качестве аргумента, помеченного через __attribute__((nonnull)) Игнорируется Игнорируется Игнорируется Игнорируется Игнорируется Игнорируется Предупреждать о декларациях в устаревшем стиле (только в режиме языка C) Предупреждать об описании процедуры в старом стиле (только в режиме языка C) Предупреждать о непостроении VLA-deallocate Игнорируется Предупреждать об известных директивах #pragma, которые поставлены в неправильном месте исходника Предупреждать о целочисленном переполнении Игнорируется Предупреждать об объявлениях виртуальных методов, которые скрывают виртуальные методы базового класса Игнорируется Игнорируется Игнорируется Игнорируется Игнорируется Предупреждать о ситуациях, когда переопределены не все перегрузки виртуального метода Предупреждать о вычислениях над указателями на функции или на void Предупреждать о преобразовании между указателями, отличающимися только квалификаторами Предупреждать о преобразовании между указателями, отличающимися только знаковостью базовых типов Предупреждать о преобразовании типа от указателя к целому с меньшим числом бит Предупреждать о несовместимом преобразовании типа от указателя к указателю Игнорируется Предупреждать об операторах __real и __imag, применяемых к целочисленному или вещественному значению Предупреждать о настройке меньшего выравнивания переменной, чем написано в __attribute__((alignment)) Игнорируется Проверять порядок инициализации полей класса в конструкторе (только в режиме языка C++) Предупреждать о гарантированном возврате из функции адреса автоматической переменной (начиная с уровня -O1) и дополнительно включить опцию -Wmaybe-return-local-addr Предупреждать о неявных return из не-void функции Игнорируется Проверять, что одна локальная переменная скрывает другую Предупреждать о сравнении знаковых и беззнаковых величинах Игнорируется Игнорируется Предупреждать о знаковом битовом поле размером 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; } Игнорируется Игнорируется Игнорируется Игнорируется Игнорируется Игнорируется Игнорируется Игнорируется Игнорируется Игнорируется Игнорируется Игнорируется Игнорируется Игнорируется Игнорируется Игнорируется Игнорируется Игнорируется Предупреждать о конструкциях, которые имеют различное поведение в традиционном и ISO C Игнорируется Игнорируется Предупреждать о наличии триграфов в режимах, их не поддерживающих Предупреждать о бессмысленных сравнениях беззнаковой переменной с нулем Предупреждать о повторных typedef'ах с одним и тем же именем Предупреждать об использовании ноля при препроцессировании для неопределенного идентификатора Предупреждать о гарантированно неинициализированных автоматических переменных (начиная с уровня -O1) Предупреждать о неизвестных директивах #pragma Предупреждать о недостижимом коде Игнорируется Игнорируется Эквивалентно комбинации опций -Wunused-function, -Wunused-label, -Wunused-value, -Wunused-variable Предупреждать о неиспользуемом результате вызова builtin-функции в случаях, когда это не имеет смысла (начиная с уровня -O1) Игнорируется Предупреждать об инициализированных, но неиспользуемых переменных Игнорируется Игнорируется Игнорируется Предупреждать о неиспользуемых функциях, кроме static inline функций Предупреждать о неиспользуемых функциях. Включает в себя -Wunused-function Предупреждать о неиспользуемых метках Игнорируется Игнорируется Предупреждать о неиспользуемых параметрах Предупреждать о неиспользуемом результате вызова функции с __attribute__((warn_unused_result)) Предупреждать о выражениях, не имеющих эффекта Предупреждать о неиспользуемых переменных, кроме static const переменых Предупреждать о неиспользуемых переменных. Включает в себя -Wunused-variable Игнорируется Игнорируется Игнорируется Предупреждать о преобразовании типа указатель на void к указателю на функцию Игнорируется Предупреждать об использовании преобразования строкового литерала в тип char* Игнорируется Отключить предупреждения, соответствующие опции -W<id>. Опции с неизвестным <id> игнорируются Предупреждения, соответствующие опции -W<id>, трактовать как ошибки Эквивалентно -Wno-<id> Все предупреждения и замечания трактовать (не трактовать) как ошибки Выдавать (не выдавать) предупреждения и замечания в системных заголовочных файлах Отображать все возможные предупреждения, отменить действия всех опций -Werror=<...> Настройки предупреждений вернуть в состояние по умолчанию Выдавать предупреждения о несоответствии строгому стандарту ISO C и ISO C++. Включает в себя -Wtypedef-redefinition То же, что и -pedantic, только выдавать ошибку Включить (выключить) печать замечаний Эквивалентно -Wextra Предупреждать, если размер стека для процедуры превышает <size> байт Игнорируется Игнорируется Эквивалентно -pedantic Подавлять все предупреждения и замечания компилятора, относящиеся к исходному тексту программы

Опции предупреждений фортрана
Диагностировать нарушение ассоциаций формальных аргументов Диагностировать выравнивание элементов общих блоков Отображать все предупреждения по поводу спорных конструкций, которые могут быть легко модифицированы. Опция является комбинацией опций -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-function, -Wunused-label, -Wunused-local-typedefs, -Wunused-value, -Wunused-variable, -Wvolatile-register-var. В данном случае слово "all" НЕ означает, что будут выдаваться все предупреждения (опция унаследована от gcc с тем же смыслом, что и в gcc). Для получения всех возможных предупреждений пользуйтесь опцией -Wall-warnings Диагностировать отсутствие символа продолжения константной строки Предупреждать о создании компилятором временных массивов Предупреждать о несовместимости типа переменной при взаимодействии с С Диагностировать обрубание символьных строк в операторе присваивания Диагностировать неявное преобразование типа в случае изменения значения Предупреждать о неявных преобразованиях между разными типами в выражении Предупреждать о сравнениях на равенство, включающих выражения типа REAL или COMPLEX Включить дополнительные предупреждения, не включаемые через -Wall. Опция является комбинацией опций -Wclobbered, -Wempty-body, -Wignored-qualifiers, -Wmissing-parameter-type, -Wold-style-declaration, -Wsign-compare, -Wtype-limits, -Wuninitialized, -Wmaybe-uninitialized, -Wunused-parameter. Предупреждать об исключении вызова функции во время оптимизации, включенной по опции -ffrontend-optimize Диагностировать вызов процедуры без явного интерфейса Предупреждать при вызове процедуры, не имеющей явного интерфейса и не объявленной как EXTERNAL Предупреждать, что пользовательская процедура или модульная процедура имеет то же имя, что и встроенная процедура Предупреждать, если найдена встроенная процедура или функция, недоступная в выбранном стандарте (указанном в опции -std) Диагностировать обрубание исходных строк текста Не диагностировать выравнивание элементов общих блоков Диагностировать символ табуляции Не диагностировать событие 'underflow' в константных вычислениях Предупреждать о том, что в литеральной константе типа real экспонента обозначена буквой q Диагностировать подозрительные места в исходном тексте Трактовать символ табуляции как пробелы Предупреждать о том, что указатель в левой части присваивания указывает на объект большей длины, чем источник в правой части Диагностировать событие 'underflow' в константных вычислениях Устанавить -Wunused-label, -Wunused-parameter, -Wunused-variable Диагностировать неиспользование меток Диагностировать неиспользование формальных аргументов Диагностировать неиспользование переменных Выдавать все предупреждающие сообщения как сообщения об ошибках Предупреждающее сообщение с номером <n> выдавать как сообщение об ошибке Подавлять все предупреждения, относящиеся к исходному тексту программы Выдавать предупреждающие сообщения обо всех расширениях стандарта То же самое, что -pedantic, но сначала выводятся сообщения об ошибках, а потом предупреждения

Базовые опции оптимизаций
Компилировать без оптимизаций Минимальный уровень оптимизаций. Включает только локальные платформо-независимые оптимизации Более высокий уровень оптимизаций, сбалансированный по времени компиляции, производительности и размеру кода. Включает в себя оптимизации уровня -О1 и основные платформо-зависимые оптимизации Ещё более высокий уровень оптимизаций, нацеленный на получение высокой производительности. Включает в себя оптимизации уровня -О2 и агрессивные платформо-зависимые оптимизации, которые могут приводить к значительному росту размера кода. Также, включает решатель (-fgos-solver) Максимальный уровень оптимизаций. Эквивалентно -O3 -fno-gos-solver Эквивалентно -O1 Эквивалентно -O2 Эквивалентно -O2 Эквивалентно -O2 Эквивалентно -O3 -ffast-math

Опции профилирования
Загрузить данные профилирования из файла <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-расширениями, влияющими на процесс линковки.

Опции AddressSanitizer
Включить AddressSanitizer Выключить инструментирование глобалов Выключить инструментирование чтений из памяти Выключить инструментирование записей в память Выключить инструментирование стека

Опции пиковой производительности
Включить версию оптимизации Black Hole по счётчикам Включить вероятностную версию оптимизации Black Hole и установление пороговой вероятности для нее [0.0-1.0] Отключить оптимизацию Loop Blocking - разрезание циклов с многократным обходом одинаковых участков памяти с целью оптимизации использования кэш-памяти Отключить оптимизацию Loop Jam - слияние независимых смежных циклов с одинаковым количеством итераций Отключить расширенную версию программной конвейеризации циклов (SoftWare Pipeline) Отключить оптимизацию Scalar Replacement - сбор межитерационных общих подвыражений Отключить оптимизацию удаления избыточных индуктивных переменных Отключить оптимизацию удаления избыточных вещественных индуктивных переменных Отключить оптимизацию векторизации вычислений Использовать безопасный способ векторизации невыровненных чтений Отключить оптимизацию Loop Unroll - раскрутка цикла Отключить оптимизацию Loop Unroll Jam - раскрутка цикла Отключить оптимизацию Loop Reroll - скрутка цикла Отключить оптимизацию 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'ей Отключить вынос векторного инварианта Отключить генерацию комбинированных операций Отключить оптимизацию расположения массивов в памяти Применять механизм аппаратной подкачки массивов, игнорируя проверки эффективности Применять механизм аппаратной подкачки массивов, игнорируя проверки эффективности, для циклов с количеством итераций больше заданного Отключить механизм аппаратной подкачки массивов Отключить механизм аппаратной подкачки массивов для циклов с количеством итераций меньше заданного Не использовать dbl флаг операции setwd Включить механизм аппаратной подкачки для чтений под условием. Данная оптимизация может приводить к некорректному поведению программы в некоторых редких случаях, например, когда чтение под условием обращается по некорректому адресу. В защищённом режиме данная опция игнорируется. Безусловно включить nesting циклов, для которых возможна конвейеризация Задать эвристики для предварительной подкачки кода - <расстояние до подкачиваемого кода (в тактах)>,<минимальное расстояние между операциями подкачки(в тактах)>[,<приоритет планирования инструкции подготовки перехода>] Отключить генерацию предварительной подкачки кода Отключить DAM - аппаратный механизм разрешения конфликтов по чтению-записи Отключить DAM для конвейеризованных циклов Отключить DAM для зависимостей чтение-вызов Отключить механизм спекулятивности по управлению Запретить генерацию любых спекулятивных обращений к памяти (как полуспекулятивных, так и полностью спекулятивных) С данной опцией нельзя собирать исходники, в которых есть builtin-ы, раскрывающиеся в (полу)спекулятивные чтения (например, __builtin_prefetch) или открытые asm-вставки с (полу)спекулятивными чтениями. Включить использование DAM без построения компенсирующего кода Включить механизм программной предподкачки данных для конвейеризованных циклов. Работает для тех чтений, к которым не применилась аппаратная предподкачка. Задать эвристику для оптимизации планирования конвейеризованных циклов с одновременным учетом возможных блокировок от неиндуктивных операций чтения [0..100] Режим экономии регистров при конвейеризации циклов, за счет возможного снижения эффективности кэша 2 уровня Задать эвристику для нерегулярной предварительной подкачки данных [1..10] Задать эвристику для конвейеризации циклов - максимальное количество операций в конвейеризуемом цикле Включить оптимизацию планирования конвейеризованных циклов с одновременным учетом возможных блокировок от неиндуктивных операций чтения Задать максимально допустимое увеличение времени исполнения цикла при применениии кэш-оптимизации [1.0-2.0] Отключить технику программной предварительной подкачки данных Задать порог неподготавливаемых переходов [0.0-1.0] Задать пороговое отношение счетчиков между выкидываемым узлом и головой цикла [0.0-1.0] Включить генерацию принудительной конвейеризации циклов Отключить генерацию неподготовленных переходов Отключить использование глобальных регистров Включить предварительную подкачку списков Включить механизм программной предподкачки данных для неконвейеризованных циклов. Работает для тех чтений, к которым не применилась аппаратная предподкачка. Задать задержку для операций чтения из памяти. Дополнительная подача опции --dump_proc=<list> задаёт список процедур, для которых меняется задержка Задать время в тактах микропроцессора, необходимое на подкачку данных из оперативной памяти в кэш L2 Опция устарела и будет удалена Опция устарела и будет удалена Опция устарела и будет удалена Установить ограничение на максимальный размер линейного участка (по умолчанию 290 операций) [8-65535] Разрешить использование глобальных регистров для хранения глобальных переменных. Параметр игнорируется для совместимости со старыми версиями компилятора. Компилятор находит все глобальные скалярные переменные, на которые не брался адрес, и распределяет наиболее часто используемые из них на глобальные регистры. Может быть использована только совместно с опциями -fwhole и -ffast. В случае ручного использования глобальных регистров (например, в asm-вставках либо при распределении переменной на регистр с помощью register asm) необходимо все использованные вручную регистры дополнительно перечислить в опциях -ffixed-g*. Задать эвристику для подстановки функций - коэффициент увеличения интенсивности подстановки [0.1-20.0] Задать эвристику для подстановки функций - коэффициент увеличения основных ресурсных ограничений [0.1-5.0] Задать эвристику для подстановки функций - максимальный размер вероятного региона процедуры для частичной подстановки Включить безусловную подстановку функций со спецификатором inline. По умолчанию компилятор игнорирует спецификатор inline, безусловно подставляя только функции, помеченные __attribute__((always_inline)). Данная опция включает безусловную подстановку функций со спецификатором inline. Наличие данной опции может привести к чрезвычайно агрессивной работе inline и выдаче ошибки из-за нехватки памяти. Выполнять подстановку только для функций с явным модификатором inline Включить расширенную версию оптимизации Scalar Replacement - сбор межитерационных общих подвыражений Понизить уровень оптимизации для процедур, некритичных по профилю задачи Понизить уровень оптимизации для процедур, некритичных по профилю задачи, с заданием порога срабатывания Применить оптимизацию Constant Propagation для статических массивов Задать минимальный размер для вырезаемого участка из большой процедуры Задать максимальный размер для вырезаемого участка из большой процедуры Отключить разбиение больших процедур на регионы. Наличие данной опции может привести к некорректной работе компилятора Разделять код на секции по профилю Применить оптимизации Constant Propagation для адресов глобальных объектов Включить преобразование локальных объектов процедуры main в глобальные Выключить межпроцедурные анализы указателей Включить межпроцедурный анализ указателей и функций Включить межпроцедурный анализ указателей и функций, межпроцедурное распространение констант Включить оптимизацию вызовов функций memset, memcpy, memmove Включить оптимизацию вызовов математических функций (pow, log, sin, cos и др.) Включить расширенную версию оптимизации оператора 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-указателей. По умолчанию зависимости рвутся только между простыми обращениями к памяти, например, такими: *p = a[i]; и только если одно из обращений к памяти выполняется по restrict-указателю, а другое - по произвольному имени либо по любому другому указателю. Данная опция включает разрыв зависимостей между простым обращением к памяти по restrict-указателю и всеми остальными (сколь угодно сложными) обращениями к памяти. Данная опция может приводить к некорректному поведению программы в случае нетривиальных обращений к памяти по restrict-указателю. Запретить оптимизацию понижения силы операций Включить печать параллелизма операций Включить печать о результатах планирования конвейеризованных циклов Включить автоматическое распараллеливание. Данная опция игнорируется при одновременной подаче с ней опции -fopenmp. Количество потоков, на которое параллелить программу Применить автоматическое распределение памяти по узлам NUMA-машины совместно с автоматическим распараллеливанием Применить автоматическое распределение памяти по узлам для комплекса с распределённой памятью совместно с автоматическим распараллеливанием Задать пороговое значение вероятности исполнения линейного участка для проведения дополнительных оптимизаций распределения регистров [0.0-1.0] Опция устарела и будет удалена Оптимизировать процедуры с вызовами setjmp Включить более агрессивное применение Loop Counter Versioning Отключить Loop Counter Versioning Разрешить строить невыровненные обращения в память в случаях, где невыровненное обращение явно вытекает из языка

Опции, которые могут приводить к неточным преобразованиям
Включает опции -fstdlib, -faligned, -fno-math-errno, -fno-signed-zeros, -ffinite-math-only, -fno-rounding-math, -fprefetch, -fmalloc-opt, -floop-apb-conditional-loads, -fstrict-aliasing. Данная опция выключена по умолчанию, поскольку включает преобразования с вещественной арифметикой, которые могут приводить к некорректным результатам в случае программ, предполагающих строгое соблюдение стандартов 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. Данная опция выключена по умолчанию, поскольку включает преобразования с вещественной арифметикой, которые могут приводить к некорректным результатам в случае программ, предполагающих строгое соблюдение стандартов IEEE или ISO для вещественных операций и функций. Тем не менее, она может существенно увеличить скорость программ, не требующих строго соблюдения этих стандартов. Разрешить преобразования стандартных функций выделения/освобождения памяти. При этом подразумевается, что они имеют обычную реализацию, т.е. не переопределены пользователем. Кроме того, подразумевается, что программе не требуется обработка исключительной ситуации, вызванной нехваткой памяти. При подаче этой опции компилятор: - считает, что функция 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, позволяющую дополнительно оптимизировать выделение/освобождение памяти в некоторых случаях. Разрешить (запретить) оптимизации, предполагающие, что не будет работы с NaN'ами и Inf'ами Запретить (разрешить) оптимизации, предполагающие, что плавающие особые ситуации типа деления на 0 можно игнорировать Запретить преобразования и оптимизации, предполагающие использование режима округления по-умолчанию. Это округление к нулю во всех преобразованиях вещественных чисел в целочисленные, и округление к ближайшему целому для всех остальных арифметических усечений. Эту опцию необходимо подавать при компиляции программ, которые могут динамически менять режим округления, либо которые могут исполнятся в режиме округления, отличном от принятого по-умолчанию. Режим по-умолчанию -fno-rounding-math. Данная опция является экспериментальной и в настоящий момент не гарантирует отключение всех оптимизаций, на которые может повлиять режим округления. При оптимизациях учитывать (не учитывать) различия между +0.0 и -0.0 Запретить оптимизации, предполагающие, что параметром функции не может быть неинициализированная переменная Эквивалентно -fassociative-math -fno-rounding-math Эквивалентно -fno-associative-math -frounding-math Отключить оптимизацию Array Padding - относительное расположение статических массивов для оптимизации работы кэш-памяти

Расширенные опции управления процессом компиляции
Добавить префикс поиска исполняемых компонент, заголовочных файлов, библиотек и crt-модулей Передать опции <opt1> <opt2> ... напрямую ассемблеру Передать опции <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> Не линковать с библиотеками по умолчанию Не линковать с библиотеками C++ по умолчанию Не линковать со стартовыми модулями по умолчанию Эквивалентно комбинации опций -nodefaultlibs и -nostartfiles Линковать до позиционно-независимого исполняемого файла Вывести все символы в динамическую таблицу символов Создать динамическую библиотеку Принудительно использовать динамическую версию libgcc Принудительно использовать статическую версию libgcc Принудительно использовать статическую версию libstdc++ Передать в линкер опцию -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, dsp-include, libmcst-lib, libmcst-include. Опция используется при сборке библиотек run-time поддержки и при сборке дистрибутива. Конечному пользователю использовать опцию не рекомендуется (но не запрещается), т.к. поведение опции может меняться при изменении версии компилятора Печатать установленные переменные окружения, влияющие на работу компилятора

Опции форматирования выдачи компилятора
Задать ограничение в <num> символов на ширину выдаваемых сообщений. Если выдаваемое сообщение не влезает в данное ограничение, то оно разбивается на несколько строк. Если значение <num> равно 0, то ограничение на ширину отсутствует. На текущий момент все остальные значения параметра трактуются как ограничение ширины сообщений по умолчанию (80 символов).

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

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

Игнорируемые опции (для совместимости с прошлыми версиями lcc)
Функциональность включена в опцию -fwhole Функциональность отключена Функциональность отключена Функциональность отключена Функциональность отключена Функциональность отключена Функциональность отключена Функциональность отключена Функциональность отключена Функциональность отключена Функциональность отключена Функциональность отключена Функциональность отключена Эквивалентно -fipa2 Функциональность отключена Функциональность отключена Функциональность отключена Функциональность включена по умолчанию Эквивалентно -funsafe-math-optimizations -fassociative-math Функциональность включена по умолчанию Функциональность включена по умолчанию Функциональность отключена Функциональность отключена Функциональность отключена Функциональность отключена Функциональность отключена Неактуально всвязи с удалением режима -fno-gnu Режим автоматически включается по комбинации опций -fkernel -pg Функциональность отключена Функциональность отключена Функциональность отключена Функциональность отключена Функциональность отключена Функциональность отключена Опция устарела и будет удалена Режим включен по умолчанию Неактуально всвязи с удалением режима -fuse-asm-output

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