Compiler (-compiler)

Задайте компилятор, который вы используете, чтобы создать ваш исходный код

Описание

Задайте компилятор, который вы используете, чтобы создать ваш исходный код.

Polyspace® полностью поддерживает наиболее распространенные компиляторы, используемые, чтобы разработать встраиваемые приложения. См. список ниже. Для этих компиляторов можно запустить анализ просто путем определения компилятора и целевого процессора. Для других компиляторов задайте generic как имя компилятора. Если вы сталкиваетесь с ошибками компиляции, явным образом задаете специфичные для компилятора расширения, чтобы работать вокруг ошибок.

Установите опцию

Пользовательский интерфейс (только десктопные решения): В вашей настройке проекта опция находится на узле Target & Compiler.

Командная строка: Используйте опцию -compiler. Смотрите информацию о командной строке.

Почему использование эта опция

Polyspace использует эту информацию, чтобы интерпретировать синтаксис, который не является частью Стандарта C/C++, но прибывает из расширений языка.

Например, опция позволяет дополнительные ключевые слова языка, такие как sfr, sbit, и bit. Если вы не задаете свой компилятор, эти дополнительные ключевые слова могут вызвать ошибки компиляции во время анализа Polyspace.

Polyspace на самом деле не вызывает ваш компилятор для компиляции. В частности:

  • Вы не можете задать флаги компилятора непосредственно в анализе Polyspace. Чтобы эмулировать ваши флаги компилятора, проследите свою команду сборки или вручную задайте эквивалентные аналитические опции 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.1, 5.2, 5.3, и 5,4 синтаксисов.

Если вы выбираете gnu5.x, опция Target processor type (-target) показывает только подмножество целей, которые позволены для базирующегося компилятора GCC. Для других целей используйте опцию Generic target options.

Для неподдерживаемых расширений GCC смотрите Ограничения.

gnu6.x

Анализ позволяет GCC 6.1, 6.2, и 6,3 синтаксисов.

Если вы выбираете gnu6.x, опция Target processor type (-target) показывает только подмножество целей, которые позволены для базирующегося компилятора GCC. Для других целей используйте опцию Generic target options.

Для неподдерживаемых расширений GCC смотрите Ограничения.

gnu7.x

Анализ позволяет GCC 7.1, 7.2, и 7,3 синтаксисов.

Если вы выбираете gnu7.x, опция Target processor type (-target) показывает только подмножество целей, которые позволены для базирующегося компилятора GCC. Для других целей используйте опцию Generic target options.

Для неподдерживаемых расширений GCC смотрите Ограничения.

clang3.x

Анализ позволяет Лязг 3.5, 3.6, 3.7, 3.8, и 3,9 синтаксиса.

clang4.x

Анализ позволяет Лязг 4.0.0 и 4.0.1 синтаксиса.

clang5.x

Анализ позволяет Лязг 5.0.0 и 5.0.1 синтаксиса.

visual9.0

Анализ позволяет синтаксис Microsoft® Visual C ++® 2008.

visual10.0

Анализ позволяет Microsoft Visual C++ 2 010 синтаксисов.

Эта опция неявно включает опции -no-stl-stubs.

visual11.0

Анализ позволяет Microsoft Visual C++ 2 012 синтаксисов.

Эта опция неявно включает опции -no-stl-stubs.

visual12.0

Анализ позволяет Microsoft Visual C++ 2 013 синтаксисов.

Эта опция неявно включает опции -no-stl-stubs.

visual14.0

Анализ позволяет Microsoft Visual C++ 2 015 синтаксисов (поддерживает Microsoft Visual Studio®update 2).

Эта опция неявно включает опции -no-stl-stubs.

visual15.x

Анализ позволяет Microsoft Visual C++ 2 017 синтаксисов (поддерживает версии Microsoft Visual Studio 15.0 до 15,7).

Эта опция неявно включает опции -no-stl-stubs.

keil

Анализ позволяет non-ANSI® Синтаксис C и семантику, сопоставленную с продуктами Keil™ от ARM (www.keil.com).

iar

Анализ позволяет Синтаксис C не-ANSI и семантику, сопоставленную с компиляторами от Систем IAR (www.iar.com).

armcc

Анализ позволяет Синтаксис C не-ANSI и семантику, сопоставленную с компилятором ARM® v5.

Если вы выбираете armcc, в пользовательском интерфейсе десктопных решений Polyspace, опции Target processor type (-target) показывает только цели, которые позволены для компилятора ARM v5. Смотрите ARM v5 Compiler (-compiler armcc).

armclang

Анализ позволяет Синтаксис C не-ANSI и семантику, сопоставленную с компилятором ARM v6.

Если вы выбираете armclang, в пользовательском интерфейсе десктопных решений Polyspace, опции Target processor type (-target) показывает только цели, которые позволены для компилятора ARM v6. Смотрите ARM v6 Compiler (-compiler armclang).

codewarrior

Анализ позволяет Синтаксис C не-ANSI и семантику, сопоставленную с компилятором NXP CodeWarrior®.

Если вы выбираете codewarrior, в пользовательском интерфейсе десктопных решений Polyspace, опции Target processor type (-target) показывает только цели, которые позволены для компилятора NXP CodeWarrior. Смотрите NXP CodeWarrior Compiler (-compiler codewarrior).

cosmic

Анализ позволяет Синтаксис C не-ANSI и семантику, сопоставленную с Космическим компилятором.

Если вы выбираете cosmic, в пользовательском интерфейсе десктопных решений Polyspace, опции Target processor type (-target) показывает только цели, которые позволены для Комического компилятора. Смотрите Cosmic Compiler (-compiler cosmic).

diab

Анализ позволяет Синтаксис C не-ANSI и семантику, сопоставленную с Ветром компилятор River® Diab.

Если вы выбираете diab, в пользовательском интерфейсе десктопных решений Polyspace, опции Target processor type (-target) показывает только цели, которые позволены для компилятора NXP CodeWarrior. Смотрите Diab Compiler (-compiler diab).

greenhills

Анализ позволяет Синтаксис C не-ANSI и семантику, сопоставленную с компилятором Green Hills®.

Если вы выбираете greenhills, в пользовательском интерфейсе десктопных решений Polyspace, опции Target processor type (-target) показывает только цели, которые позволены для компилятора Green Hills. Смотрите Green Hills Compiler (-compiler greenhills).

iar-ew

Анализ позволяет Синтаксис C не-ANSI и семантику, сопоставленную с IAR Встроенный компилятор Инструментальных средств.

Если вы выбираете iar-ew, в пользовательском интерфейсе десктопных решений Polyspace, опции Target processor type (-target) показывает только цели, которые позволены для IAR Встроенный компилятор Инструментальных средств. Смотрите IAR Embedded Workbench Compiler (-compiler iar-ew).

microchip

Анализ позволяет Синтаксис C не-ANSI и семантику, сопоставленную с компилятором C MPLAB XC8.

Если вы выбираете microchip, в пользовательском интерфейсе десктопных решений Polyspace, опции Target processor type (-target) показывает только цели, которые позволены для компилятора C MPLAB XC8. Смотрите MPLAB XC8 C Compiler (-compiler microchip).

renesas

Анализ позволяет Синтаксис C не-ANSI и семантику, сопоставленную с компилятором Renesas®.

Если вы выбираете renesas, в пользовательском интерфейсе десктопных решений Polyspace, опции Target processor type (-target) показывает только цели, которые позволены для компилятора Renesas. Смотрите Renesas Compiler (-compiler renesas).

tasking

Анализ позволяет Синтаксис C не-ANSI и семантику, сопоставленную с ОПРЕДЕЛЯЮЩИМ ЗАДАЧУ компилятором.

Если вы выбираете tasking, в пользовательском интерфейсе десктопных решений Polyspace, опции Target processor type (-target) показывает только цели, которые позволены для ОПРЕДЕЛЯЮЩЕГО ЗАДАЧУ компилятора. Смотрите TASKING Compiler (-compiler tasking).

ti

Анализ позволяет Синтаксис C не-ANSI и семантику, сопоставленную с Instruments™compiler Техаса.

Если вы выбираете ti, в пользовательском интерфейсе десктопных решений Polyspace, опции Target processor type (-target) показывает только цели, которые позволены для компилятора Texas Instruments. Смотрите Texas Instruments Compiler (-compiler ti).

cosmic

Анализ позволяет Синтаксис C не-ANSI и семантику, сопоставленную с компилятором, используемым в Космических инструментах разработки программного обеспечения.

Если вы выбираете cosmic, в пользовательском интерфейсе десктопных решений Polyspace, опции Target processor type (-target) показывает только цели, которые позволены для Космического компилятора.

Советы

  • Ваша спецификация компилятора определяет значения многих специфичные для компилятора макросы. В случае, если вы хотите знать, как 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. Например, Правило 8 AV: “Весь код должен соответствовать 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 не может анализировать этот тип данных семантически. Средство поиска ошибки позволяет использование 128-битных типов данных, но Программа автоматического доказательства Кода показывает ошибку компиляции, если вы используете такой тип данных, например, дополнительный __float128 GCC.

  • Версия 7.x компиляторов GNU:

    • Имена типов _FloatN и _FloatNx семантически не поддержаны. Анализ обрабатывает их как тип float'double', или long double.

    • Константы типа _FloatN или _FloatNx с суффиксами fN, FN, или fNx, такой как 1.2f123 или 2.3F64x не поддержаны.

  • Компиляторы Visual Studio:

    • Ускоренный крупный параллелизм (AMP) C++.

      AMP C++ является функцией Visual Studio, которая ускоряет ваше подписание Кода С++ для определенных типов параллельного данным оборудования на определенных целях. Вы обычно используете restrict ключевое слово, чтобы активировать эту опцию.

      void Buffer() restrict(amp) 
      {
        ... 
      }

    • __assume операторы.

      Вы обычно используете __assume с условием, которое является ложным. Оператор указывает, что оптимизатор должен принять условие быть впредь верным. Программа автоматического доказательства кода не может согласовать это противоречие. Вы получаете ошибку:

      Asked for compulsory presence of absent entity : assert

    • Управляемые Расширения для C++ (требуемый для Среды.NET), или ее преемник, C++ / CLI (C++, измененный для Общеязыковой инфраструктуры)

    • __declspec ключевое слово с атрибутами кроме noreturn, nothrow, selectany или thread.

Информация о командной строке

Параметр: -compiler
Значение: generic | gnu3.4 | gnu4.6 | gnu4.7 | gnu4.8 | gnu4.9 | gnu5.x | gnu6.x | gnu7.x | clang3.x | clang4.x | clang5.x | visual9.0 | visual10.0 | visual11.0 | visual12.0 | visual14.0 | visual15.x | keil | iar | armcc | armclang | codewarrior | cosmic | diab | greenhills | iar-ew | microchip |renesas | tasking | ti
Значение по умолчанию: generic
Пример 1 (Средство поиска Ошибки): Polyspace Bug Finder - Ленг c - источники "file1.c,file2.c" - компилятор gnu4.6
Пример 2 (Средство поиска Ошибки): Polyspace Bug Finder - Ленг cpp - источники "file1.cpp,file2.cpp" - компилятор visual9.0
Пример 1 (Программа автоматического доказательства Кода): Polyspace Code Prover - Ленг c - источники "file1.c,file2.c" - Ленг c - компилятор gnu4.6
Пример 2 (Программа автоматического доказательства Кода): Polyspace Code Prover - Ленг cpp - источники "file1.cpp,file2.cpp" - компилятор visual9.0
Пример 1 (Сервер Средства поиска Ошибки): сервер средства поиска ошибки полипробела - Ленг c - источники "file1.c,file2.c" - компилятор gnu4.6
Пример 2 (Сервер Средства поиска Ошибки): сервер средства поиска ошибки полипробела - Ленг cpp - источники "file1.cpp,file2.cpp" - компилятор visual9.0
Пример 1 (Сервер Программы автоматического доказательства Кода): сервер программы автоматического доказательства полипробела кода - Ленг c - источники "file1.c,file2.c" - Ленг c - компилятор gnu4.6
Пример 2 (Сервер Программы автоматического доказательства Кода): сервер программы автоматического доказательства полипробела кода - Ленг cpp - источники "file1.cpp,file2.cpp" - компилятор visual9.0