AUTOSAR C++14 Rule A7-4-1

asm объявление не должно использоваться

Описание

Управляйте определением

asm объявление не должно использоваться.

Объяснение

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