-compiler)Укажите компилятор, который вы используете для создания исходного кода
Укажите компилятор, который используется для создания исходного кода.
Polyspace® полностью поддерживает наиболее распространенные компиляторы, используемые для разработки встраиваемых приложений. См. список ниже. Для этих компиляторов можно запустить анализ, просто указав компилятор и целевой процессор. Для других компиляторов задайте generic как имя компилятора. Если вы столкнулись с ошибками компиляции, явным образом задайте расширения для компилятора, чтобы обойти ошибки.
Пользовательский интерфейс (только для настольных продуктов): В строении проекта опция находится на узле Target & Compiler.
Командная строка и файл опций: Используйте опцию -compiler. См. «Информация о командной строке».
Polyspace использует эту информацию для интерпретации синтаксиса, который не является частью стандарта C/C + +, но поступает из языковых расширений.
Например, опция позволяет использовать дополнительные ключевые слова на языке, такие как sfr, sbit, и bit. Если вы не задаете свой компилятор, эти дополнительные ключевые слова могут вызвать ошибки компиляции во время анализа Polyspace.
Polyspace на самом деле не вызывает ваш компилятор для компиляции. В частности:
Вы не можете задать флаги компилятора непосредственно в анализе Polyspace. Чтобы эмулировать флаги компилятора, проследите команду build или вручную задайте эквивалентные опции анализа Polyspace. См. «Задание целевого окружения и поведение компилятора».
Code Prover имеет политику связывания, которая строже, чем обычные компиляторы. Например, если ваш компилятор допускает несоответствие объявлений с определенными опциями компилятора, вы не можете эмулировать эту политику связывания в Code Prover. Смотрите Поиск и устранение проблем при компиляции и связывании ошибок (Polyspace Code Prover).
По умолчанию: generic
genericАнализ допускает только стандартный синтаксис.
Стандарт языка определяется вашим выбором для следующих опций:
Если вы явным образом не задаете стандарт, то стандарт зависит от вашего выбора компилятора.
gnu3.4Анализ позволяет получить синтаксис GCC 3.4.
gnu4.6Анализ позволяет получить синтаксис GCC 4.6.
gnu4.7Анализ позволяет получить синтаксис GCC 4.7.
Для неподдерживаемых расширений GCC смотрите Ограничения.
gnu4.8Анализ позволяет получить синтаксис GCC 4.8.
Для неподдерживаемых расширений GCC смотрите Ограничения.
gnu4.9Анализ позволяет получить синтаксис GCC 4.9.
Для неподдерживаемых расширений GCC смотрите Ограничения.
gnu5.xАнализ позволяет получить синтаксис GCC 5.x. Список доступных версий GCC 5.x см. в релизах GCC.
Если вы выбираете gnu5.x, опция Target processor type (-target) показывает только подмножество целевых объектов, разрешенных для компилятора на основе GCC. Для других целей используйте опцию Generic target options.
Для неподдерживаемых расширений GCC смотрите Ограничения.
gnu6.xАнализ позволяет получить синтаксис GCC 6.x. Список доступных версий GCC 6.x см. в релизах GCC.
Если вы выбираете gnu6.x, опция Target processor type (-target) показывает только подмножество целевых объектов, разрешенных для компилятора на основе GCC. Для других целей используйте опцию Generic target options.
Для неподдерживаемых расширений GCC смотрите Ограничения.
gnu7.xАнализ позволяет получить синтаксис GCC 7.x. Список доступных версий GCC 7.x см. в релизах GCC.
Если вы выбираете gnu7.x, опция Target processor type (-target) показывает только подмножество целевых объектов, разрешенных для компилятора на основе GCC. Для других целей используйте опцию Generic target options.
Для неподдерживаемых расширений GCC смотрите Ограничения.
gnu8.xАнализ позволяет получить синтаксис GCC 8.x. Список доступных версий GCC 8.x см. в релизах GCC.
Если вы выбираете gnu8.x, опция Target processor type (-target) показывает только подмножество целевых объектов, разрешенных для компилятора на основе GCC. Для других целей используйте опцию Generic target options.
Для неподдерживаемых расширений GCC смотрите Ограничения.
clang3.xАнализ позволяет использовать синтаксис Clang 3.5, 3.6, 3.7, 3.8 и 3.9.
clang4.xАнализ позволяет использовать синтаксис Clang 4.0.0 и 4.0.1.
clang5.xАнализ позволяет использовать синтаксис Clang 5.0.0, 5.0.1 и 5.0.2.
visual9.0Анализ позволяет использовать Microsoft® Визуальный C++® Синтаксис 2008 года.
visual10.0Анализ позволяет использовать синтаксис Microsoft Visual C++ 2010.
Эта опция неявно включает опцию -no-stl-stubs.
visual11.0Анализ позволяет использовать синтаксис Microsoft Visual C++ 2012.
Эта опция неявно включает опцию -no-stl-stubs.
visual12.0Анализ позволяет использовать синтаксис Microsoft Visual C++ 2013.
Эта опция неявно включает опцию -no-stl-stubs.
visual14.0Анализ позволяет использовать синтаксис Microsoft Visual C++ 2015 (поддерживает Microsoft Visual Studio® обновление 2).
Эта опция неявно включает опцию -no-stl-stubs.
visual15.xАнализ позволяет использовать синтаксис Microsoft Visual C++ 2017. Список доступных версий Microsoft Visual Studio 2017 см. в журнале информаций о релизах Visual Studio 2017.
Эта опция неявно включает опцию -no-stl-stubs.
visual16.xАнализ позволяет использовать синтаксис Microsoft Visual C++ 2019. Список доступных версий Microsoft Visual Studio 2019 см. в истории информаций о релизах Visual Studio 2019.
Эта опция неявно включает опцию -no-stl-stubs.
keilАнализ позволяет использовать не-ANSI®Синтаксис C, связанные с Keil™ продуктами из ARM (www.keil.com).
iarАнализ позволяет не-ANSI синтаксис C и семантику, сопоставленные с компиляторами из IAR Systems (www.iar.com).
armccАнализ позволяет не-ANSI синтаксис C и семантику, сопоставленные с ARM® компилятор v5.
Если вы выбираете armcc, в пользовательском интерфейсе десктопных продуктов Polyspace, опция Target processor type (-target) отображает только те цели, которые разрешены для компилятора ARM v5. См. ARM v5 Compiler (-compiler armcc).
armclangАнализ позволяет не-ANSI синтаксис C и семантику, сопоставленные с ARM v6 компилятором.
Если вы выбираете armclang, в пользовательском интерфейсе десктопных продуктов Polyspace, опция Target processor type (-target) отображает только те цели, которые разрешены для компилятора ARM v6. См. ARM v6 Compiler (-compiler armclang).
codewarriorАнализ позволяет не-ANSI синтаксис C и семантику, сопоставленные с NXP CodeWarrior® компилятор.
Если вы выбираете codewarrior, в пользовательском интерфейсе десктопных продуктов Polyspace, опция Target processor type (-target) показывает только те цели, которые разрешены для компилятора NXP CodeWarrior. См. NXP CodeWarrior Compiler (-compiler codewarrior).
cosmicАнализ позволяет не-ANSI синтаксис C и семантику, сопоставленные с Космическим компилятором.
Если вы выбираете cosmic, в пользовательском интерфейсе десктопных продуктов Polyspace, опция Target processor type (-target) отображает только те целевые объекты, которые разрешены для компилятора Comic. См. Cosmic Compiler (-compiler cosmic).
diabАнализ позволяет не-ANSI синтаксис C и семантику, сопоставленные с Wind River® Компилятор Diab.
Если вы выбираете diab, в пользовательском интерфейсе десктопных продуктов Polyspace, опция Target processor type (-target) показывает только те цели, которые разрешены для компилятора NXP CodeWarrior. См. Diab Compiler (-compiler diab).
greenhillsАнализ позволяет не-ANSI синтаксис C и семантику, сопоставленные с Green Hills® компилятор.
Если вы выбираете greenhills, в пользовательском интерфейсе десктопных продуктов Polyspace, опция Target processor type (-target) отображает только те цели, которые разрешены для компилятора Green Hills. См. Green Hills Compiler (-compiler greenhills).
iar-ewАнализ позволяет использовать синтаксис и семантику, отличную от ANSI C, связанную с компилятором IAR Embedded Workbench.
Если вы выбираете iar-ew, в пользовательском интерфейсе десктопных продуктов Polyspace, опция Target processor type (-target) показаны только целевые объекты, разрешенные для компилятора IAR Embedded Workbench. См. IAR Embedded Workbench Compiler (-compiler iar-ew).
microchipАнализ позволяет не-ANSI синтаксис C и семантику, сопоставленные с MPLAB XC8 C компилятором.
Если вы выбираете microchip, в пользовательском интерфейсе десктопных продуктов Polyspace, опция Target processor type (-target) отображает только те целевые объекты, которые разрешены для компилятора MPLAB XC8 C. См. MPLAB XC8 C Compiler (-compiler microchip).
renesasАнализ позволяет не-ANSI синтаксис C и семантику, сопоставленные с Renesas® компилятор.
Если вы выбираете renesas, в пользовательском интерфейсе десктопных продуктов Polyspace, опция Target processor type (-target) отображает только те целевые объекты, которые разрешены для компилятора Renesas. См. Renesas Compiler (-compiler renesas).
taskingАнализ позволяет использовать синтаксис и семантику, отличную от ANSI C, связанную с компилятором TASKING.
Если вы выбираете tasking, в пользовательском интерфейсе десктопных продуктов Polyspace, опция Target processor type (-target) отображает только те целевые объекты, которые разрешены для компилятора TASKING. См. TASKING Compiler (-compiler tasking).
tiАнализ позволяет не-ANSI синтаксис C и семантику, сопоставленные с техасской Instruments™compiler.
Если вы выбираете ti, в пользовательском интерфейсе десктопных продуктов Polyspace, опция Target processor type (-target) показывает только те цели, которые разрешены для компилятора Texas Instruments. См. Texas Instruments Compiler (-compiler ti).
cosmicАнализ позволяет не-ANSI синтаксис C и семантику, сопоставленные с компилятором, используемым в инструментах разработки ПО Cosmic.
Если вы выбираете cosmic, в пользовательском интерфейсе десктопных продуктов Polyspace, опция Target processor type (-target) показывает только те цели, которые разрешены для компилятора Cosmic.
Спецификация компилятора определяет значения многих макросов, специфичных для компилятора. Если вы хотите знать, как Polyspace задает определенный макрос, используйте опцию -dump-preprocessing-info.
Чтобы переопределить определение макроса, используйте опцию Preprocessor definitions (-D).
Чтобы не определить макрос, используйте опцию Disabled preprocessor definitions (-U).
Если вы используете компилятор Visual Studio, необходимо использовать Target processor type (-target) опция, которая устанавливает long long до 64 бит. Совместимые цели включают: i386, sparc, m68k, powerpc, tms320c3x, sharc21x61, mpc5xx, x86_64, или mcpu с long long установите значение 64 (-long-long-is-64bits в командной строке).
Если вы используете опцию Check JSF AV C++ rules (-jsf-coding-rules), выберите компилятор generic. Если вы используете другой компилятор, Polyspace не может проверить JSF® правила кодирования, которые требуют соответствия стандарту ISO. Например, AV Rule 8: «Весь код должен соответствовать стандарту C++ стандарта ISO/IEC 14882:2002 (E)».
Polyspace не поддерживает определенные функции этих компиляторов:
GNU® компиляторы (версия 4.7 или более поздняя):
Вложенные функции.
Для образца - функция bar вложен в функцию foo:
int foo (int a, int b)
{
int bar (int c) { return c * c; }
return bar (a) + bar (b);
}Двоичные операции с векторными типами, где один операнд использует сокращённое обозначение для равномерных векторов.
Например, в операции сложения 2+a, 2 используется в качестве краткого обозначения для {2,2,2,2}.
typedef int v4si __attribute__ ((vector_size (16)));
v4si res, a = {1,2,3,4};
res = 2 + a; /* means {2,2,2,2} + a */Прямое объявление параметров функции.
Для образца, параметр len переадресовано:
void func (int len; char data[len][len], int len)
{
/* … */
}Комплексные целочисленные типы данных.
Однако поддерживаются сложные типы данных с плавающей точкой.
Инициализация структур с гибкими представителями массива с помощью списка инициализации.
Для образца структура S имеет гибкий представителя массива tab. Переменная типа S непосредственно инициализируется списком инициализации.
struct S {
int x;
int tab[]; /* flexible array member - not supported */
};
struct S s = { 0, 1, 2} ;s.tab[1].128-битные переменные.
Polyspace не может анализировать этот тип данных семантически. Bug Finder позволяет использовать 128-битные типы данных, но Код Prover показывает ошибку компиляции, если вы используете такой тип данных, для образца, расширение GCC __float128.
Компиляторы GNU версии 7.x:
Имена типов _FloatN и _FloatNx не поддерживаются семантически. Анализ рассматривает их как тип float, double, или long double.
Константы типа _FloatN или _FloatNx с суффиксами fN, FN, или fNx, таких как 1.2f123 или 2.3F64x не поддерживаются.
Компиляторы Visual Studio:
Ускоренный массивный параллелизм (AMP).
C++ AMP является функцией Visual Studio, которая ускоряет выполнение кода С++ для определенных типов оборудования data-parallel на конкретных целевых устройствах. Обычно вы используете restrict ключевое слово для включения этой функции.
void Buffer() restrict(amp)
{
...
}__assume операторы.
Обычно вы используете __assume с условием false. Оператор указывает, что оптимизатор должен принять условие, которое будет впредь true. Code Prover не может согласовать это противоречие. Вы получаете ошибку:
Asked for compulsory presence of absent entity : assert
Управляемые расширения для C++ (необходимые для .NET Framework) или его преемник, C + +/CLI (C++ измененный для общей языковой инфраструктуры)
__declspec ключевое слово с атрибутами, отличными от noreturn, nothrow, selectany или thread.
Параметр: -compiler |
Значение: armcc | armclang | clang3.x | clang4.x | clang5.x | codewarrior | cosmic | diab | generic | gnu3.4 | gnu4.6 | gnu4.7 | gnu4.8 | gnu4.9 | gnu5.x | gnu6.x | gnu7.x | gnu8.x | greenhills | iar | iar-ew | keil | microchip | renesas | tasking | ti | visual10.0 | visual11.0 | visual12.0 | visual14.0 | visual15.x | visual16.x | visual9.0 |
По умолчанию:
generic |
Пример 1 (Bug Finder):
Polyspace Bug Finder -lang c -sources |
Пример 2 (Bug Finder):
Polyspace Bug Finder -lang cpp -sources |
Пример 1 (Code Prover):
Polyspace Code Prover -lang c -sources |
Пример 2 (Code Prover):
Polyspace Code Prover -lang cpp -sources |
Пример 1 (Bug Finder Server):
polyspace-bug-finder-server -lang c -sources |
Пример 2 (Bug Finder Server):
polyspace-bug-finder-server -lang cpp -sources |
Пример 1 (Код Prover Server):
Полипространство -code-prover-server -lang c -sources |
Пример 2 (Код Prover Server):
Полипространство -code-prover-server -lang cpp -sources |