Ошибки, связанные с компилятором 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встроенный, packed, interrupt, extendedXY, vector, pixelbool и другие:

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