Непонятный анализ потока управления из Parasoft C + + test

Мы используем тест Parasoft C ++ для статического анализа нашего кода. У него проблемы с кодом вроде следующего:

void foo(int* x) {
    try {
        bar();
    } catch(...) {
        delete x;
        throw;
    }

    *x;
}

Он предупреждает в строке * x; , что:

Освободившаяся память не должна быть впоследствии доступна ни при каких обстоятельствах

Каким-то образом он пришел к выводу, что control поток может перейти в блок catch (...) , удалить x , пройдите мимо выброса ; и доберитесь до * x; . Я попробовал throw std :: exception (""); и пару других и получил то же самое. Parasoft определенно знает об исключениях и включает их в свой поток управления, потому что существует множество других тестов, которые включают проверку исключений. В данном случае это просто сбивает с толку, или есть какой-то способ для выполнения этой программы, чтобы поразить как delete x; , так и * x; ?

8
задан Michael Mrozek 26 April 2011 в 20:34
поделиться