Как правильно оформить switch, содержащий noreturn-функцию?

В одной из ветвей switch-case содержится вызов невозвратной функции (перезагрузка устройства), которая не помечена атрибутом [[noreturn]]. Она библиотечная (ОСРВ МАКС). Вот фрагмент кода:

ALARM_ACTION MyApp::OnAlarm(ALARM_REASON reason)
{
    switch (reason)
    {
    case AR_STACK_OVERFLOW:
        return AA_RESTART_TASK;
    case AR_NMI_RAISED:
    case AR_HARD_FAULT:
        System::McuReset();  //Фактически - noreturn, но не помечена атрибутом
        //?
    default:
        return Application::OnAlarm(reason);    
    }
}

Собственно, что написать на месте вопроса? Если написать break, то будет предупреждение "Не все ветви кода возвращают значение". Если не писать ничего, то будет предупреждение статического анализатора о fallthrough. Можно, конечно, написать здесь атрибут [[fallthrough]], но это неправда. А как тогда правильно?


Ответы (2 шт):

Автор решения: user7860670

Заворачивается в функцию, которая реально noreturn:

[[noreturn]] void MyMcuReset(void)
{
    System::McuReset();
    ::std::abort();
}

И потом вызывается она:

case AR_HARD_FAULT: MyMcuReset();
→ Ссылка
Автор решения: HolyBlackCat

Еще вариант - добавить туда return, например return {};.

→ Ссылка