-compiler)Укажите компилятор, используемый для создания исходного кода
Укажите компилятор, используемый для создания исходного кода.
Polyspace ® полностью поддерживает самые распространенные компиляторы, используемые для разработки встраиваемых приложений. См. список ниже. Для этих компиляторов можно выполнить анализ, просто указав компилятор и целевой процессор. Для других компиляторов укажитеgeneric как имя компилятора. При возникновении ошибок компиляции явным образом определите специфичные для компилятора расширения для работы с ошибками.
Пользовательский интерфейс (только для настольных ПК): в конфигурации проекта этот параметр находится в узле Target & Compiler.
файл командной строки и параметров: Использовать параметр -compiler. См. раздел Сведения о командной строке.
Polyspace использует эту информацию для интерпретации синтаксиса, который не является частью стандарта C/C + +, но происходит от языковых расширений.
Например, опция допускает дополнительные ключевые слова языка, такие как sfr, sbit, и bit. Если компилятор не указан, эти дополнительные ключевые слова могут привести к ошибкам компиляции во время анализа Polyspace.
Polyspace фактически не вызывает компилятор для компиляции. В частности:
Нельзя указывать флаги компилятора непосредственно в анализе Polyspace. Чтобы эмулировать флаги компилятора, выполните трассировку команды build или вручную задайте эквивалентные параметры анализа Polyspace. См. раздел Определение целевой среды и поведения компилятора.
Программа Code Prover имеет более строгую политику связывания, чем обычные компиляторы. Например, если компилятор допускает несовпадения объявлений с определенными параметрами компилятора, эту политику связывания нельзя эмулировать в программе Code Prover. См. раздел Устранение ошибок компиляции и связывания (средство проверки кода Polyspace).
По умолчанию: 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 ® Visual 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 (поддерживает обновление 2 для Microsoft Visual Studio ®).
Этот параметр неявно включает этот параметр -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.
При выборе 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 8: «Весь код должен соответствовать стандарту ISO/IEC 14882:2002 (E) C++».
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-битные типы данных, но Code Prover показывает ошибку компиляции, если вы используете такой тип данных, например расширение GCC __float128.
Компиляторы GNU версии 7.x:
Имена типов _FloatN и _FloatNx не поддерживаются семантически. Анализ рассматривает их как тип float, double, или long double.
Константы типа _FloatN или _FloatNx с суффиксами fN, FN, или fNx, такие как 1.2f123 или 2.3F64x не поддерживаются.
Компиляторы Visual Studio:
Ускоренный массовый параллелизм C++ (AMP).
C++ AMP - это функция Visual Studio, ускоряющая выполнение кода C++ для определенных типов оборудования с параллельными данными на определенных объектах. Как правило, используется restrict ключевое слово для включения этой функции.
void Buffer() restrict(amp)
{
...
}__assume заявления.
Как правило, используется __assume с условием false. Оператор указывает, что оптимизатор должен принять условие, которое должно быть истинным. Программа проверки кода не может устранить это противоречие. Вы получаете ошибку:
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 (поиск ошибок):
polyspace-bug-finder -lang c -sources |
Пример 2 (поиск ошибок):
polyspace-bug-finder -lang cpp -sources |
Пример 1 (проверка кода):
polyspace-code-prover -lang c -sources |
Пример 2 (проверка кода):
polyspace-code-prover -lang cpp -sources |
Пример 1 (сервер поиска ошибок):
polyspace-bug-finder-server -lang c -sources |
Пример 2 (сервер поиска ошибок):
polyspace-bug-finder-server -lang cpp -sources |
Пример 1 (сервер проверки кода):
polyspace-code-prover-server -lang c -sources |
Пример 2 (сервер проверки кода):
polyspace-code-prover-server -lang cpp -sources |