exponenta event banner

Компилятор (-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 ® 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.

  • При использовании компилятора 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 "file1.c,file2.c" -compiler gnu4.6
Пример 2 (поиск ошибок): polyspace-bug-finder -lang cpp -sources "file1.cpp,file2.cpp" -compiler visual9.0
Пример 1 (проверка кода): polyspace-code-prover -lang c -sources "file1.c,file2.c" -lang c -compiler gnu4.6
Пример 2 (проверка кода): polyspace-code-prover -lang cpp -sources "file1.cpp,file2.cpp" -compiler visual9.0
Пример 1 (сервер поиска ошибок): polyspace-bug-finder-server -lang c -sources "file1.c,file2.c" -compiler gnu4.6
Пример 2 (сервер поиска ошибок): polyspace-bug-finder-server -lang cpp -sources "file1.cpp,file2.cpp" -compiler visual9.0
Пример 1 (сервер проверки кода): polyspace-code-prover-server -lang c -sources "file1.c,file2.c" -lang c -compiler gnu4.6
Пример 2 (сервер проверки кода): polyspace-code-prover-server -lang cpp -sources "file1.cpp,file2.cpp" -compiler visual9.0