Ошибки, связанные с Компилятор

Если вы выбираете diab для опции Compiler (-compiler)Вы можете столкнуться с этой проблемой.

Проблема

Во время Polyspace® анализ показывает ошибку, связанную с ключевым словом, характерным для компилятора Diab. Например, вы видите ошибку, связанную с restrict ключевое слово.

Причина

Обычно для включения ключевого слова используется флаг компилятора. Анализ Polyspace не включает эти ключевые слова по умолчанию. Вы должны сделать Polyspace в курсе ваших флагов компилятора.

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

Решение

Используйте опцию командной строки -compiler-parameter в вашем анализе Polyspace следующим образом. Вы используете эту опцию командной строки, чтобы Polyspace знал о ваших флагах компилятора. В пользовательском интерфейсе десктопных продуктов Polyspace можно ввести опцию командной строки в поле Other. Вы можете ввести опцию несколько раз.

Аргумент -compiler-parameter зависит от ключевого слова, вызывающего ошибку. После включения ключевого слова не используйте имя ключевого слова в качестве обычного идентификатора. Например, после включения ключевого слова pixel, не использовать pixel как имя переменной. Оператор int pixel = 1 вызывает ошибку компиляции.

  • restrict ключевое слово:

    Обычно вы используете флаг компилятора -Xlibc-new или -Xc-new. Для анализа Polyspace используйте

    -compiler-parameter -Xc-new

    Следующий код не будет компилироваться с Polyspace, если вы не задаете флаг компилятора.

    int sscanf(const char *restrict, const char *restrict, ...);

  • PowerPC AltiVec вектора расширения, такие как vector type qualifier:

    Обычно вы используете флаг компилятора -tPPCALLAV:. Для анализа Polyspace используйте

    -compiler-parameter -tPPCALLAV:

    Следующий код не будет компилироваться с Polyspace, если вы не задаете флаг компилятора.

    vector unsigned char vbyte;
    vector bool vbool;
    vector pixel vpx;
    
    int main(int argc, char** argv)
    {
      return 0;
    }

  • Расширенные ключевые слова, такие как pascal, inline, packed, interrupt, extended, __X, __Y, vector, pixel, bool и другие:

    Обычно вы используете флаг компилятора -Xkeywords=. Для анализа Polyspace используйте

    -compiler-parameter -Xkeywords=0xFFFFFFFF

    Следующий код не будет компилироваться с Polyspace, если вы не задаете флаг компилятора.

    packed(4) struct s2_t {
        char b;
        int i;
    } s2;
    
    packed(4,2) struct s3_t {
        char b;
    } s3;
    
    int pascal foo = 4;
    
    int main(int argc, char** argv) {
        foo++;
        return 0;
    }