AUTOSAR C++14 Rule A7-4-1

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

Описание

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

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

Объяснение

The asm declaration является методом, включающим инструкции по сборке непосредственно в исходный код C++. Поддержка и реализация asm объявление является несогласованным между окружениями. The 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