Compiler (-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.

  • Если вы используете компилятор 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} ;
      Вы видите предупреждение во время анализа и красную сдачу результатов, когда вы dereference, например, 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 "file1.c,file2.c" -компилятор gnu4.6
Пример 2 (Bug Finder): Polyspace Bug Finder -lang cpp -sources "file1.cpp,file2.cpp" -компилятор визуал9,0
Пример 1 (Code Prover): Polyspace Code Prover -lang c -sources "file1.c,file2.c" -lang c -compiler gnu4.6
Пример 2 (Code Prover): Polyspace Code Prover -lang cpp -sources "file1.cpp,file2.cpp" -компилятор визуал9,0
Пример 1 (Bug Finder Server): polyspace-bug-finder-server -lang c -sources "file1.c,file2.c" -компилятор gnu4.6
Пример 2 (Bug Finder Server): polyspace-bug-finder-server -lang cpp -sources "file1.cpp,file2.cpp" -компилятор визуал9,0
Пример 1 (Код Prover Server): Полипространство -code-prover-server -lang c -sources "file1.c,file2.c" -lang c -compiler gnu4.6
Пример 2 (Код Prover Server): Полипространство -code-prover-server -lang cpp -sources "file1.cpp,file2.cpp" -компилятор визуал9,0