-compiler
)Укажите компилятор, который вы используете для создания исходного кода
Укажите компилятор, который используется для создания исходного кода.
Polyspace® полностью поддерживает наиболее распространенные компиляторы, используемые для разработки встраиваемых приложений. См. список ниже. Для этих компиляторов можно запустить анализ, просто указав компилятор и целевой процессор. Для других компиляторов задайте generic
как имя компилятора. Если вы столкнулись с ошибками компиляции, явным образом задайте расширения для компилятора, чтобы обойти ошибки.
Пользовательский интерфейс (только для настольных продуктов): В строении проекта опция находится на узле Target & Compiler.
Командная строка и файл опций: Используйте опцию -compiler
. См. «Информация о командной строке».
Polyspace использует эту информацию для интерпретации синтаксиса, который не является частью стандарта C/C + +, но поступает из языковых расширений.
Например, опция позволяет использовать дополнительные ключевые слова на языке, такие как sfr
, sbit
, и bit
. Если вы не задаете свой компилятор, эти дополнительные ключевые слова могут вызвать ошибки компиляции во время анализа Polyspace.
Polyspace на самом деле не вызывает ваш компилятор для компиляции. В частности:
Вы не можете задать флаги компилятора непосредственно в анализе Polyspace. Чтобы эмулировать флаги компилятора, проследите команду build или вручную задайте эквивалентные опции анализа Polyspace. См. «Задание целевого окружения и поведение компилятора».
Code Prover имеет политику связывания, которая строже, чем обычные компиляторы. Например, если ваш компилятор допускает несоответствие объявлений с определенными опциями компилятора, вы не можете эмулировать эту политику связывания в 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 |