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

Если вы выбираете 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:

    Вы обычно используете флаг -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;
    }