exponenta event banner

Правило AUTOSAR C++ 14 A7-4-1

Декларация асм не должна использоваться

Описание

Определение правила

Декларация асм не используется.

Объяснение

asm объявление - это метод включения инструкций сборки непосредственно в исходный код C++. Поддержка и осуществление asm объявление несовместимо между средами. asm объявление по-разному взаимодействует с исходным кодом C++ в различных средах. Чтобы избежать ограничения переносимости кода, не используйте asm и не включать инструкции по сборке в исходный код C++.

Внедрение Polyspace

Polyspace ® помечает использование asm объявление в любом месте исходного кода C++.

Поиск неисправностей

Если вы ожидаете нарушения правила, но не видите его, обратитесь к разделу Нарушения стандартов кодирования не отображаются.

Примеры

развернуть все

#include <cstdint>
using namespace std;
const char* p = "hello world";

void Fn1(void)
{
    asm("movq p, %rdi\n" // Noncompliant
        "call puts");
}

#define _debug() asm volatile("debug":::"memory")  // Noncompliant    

void Fn2(void)
{
    _debug();
}

main()
{
    //
}

Polyspace помечает использование asm объявление в Fn(1) поскольку инструкции по сборке, следующие за объявлением, зависят от среды. Например, при использовании компилятора gcc в среде x64 Linux ® Fn1() создает строку hello world при вызове. В других средах выходные данные вызова Fn1() непредсказуемо. Polyspace также отмечает использование asm при создании _debug() макро.

Проверить информацию

Группа: Объявление
Категория: Обязательно, Автоматизировано
Представлен в R2020a