Наткнулся на фичу оптимизатора VC.
Сама по себе, фича не страшная, но усугублялась многопоточным кодом.
#include <stdio.h>
#include <stdlib.h>
extern "C" volatile int ef = 0;
void main()
{
int* x = 0;
try {
if ( ef == 1 ) throw 1;
}catch(...){
printf("exception\n");
}
printf("call\n");
if ( *x ) printf("flagged\n");
}
компилируем
cl /GX /O2 /Ob1 test1.cpp
выхлоп
Z:\tmp\TEST0>test1.exe
call
exception
call
и, естественно, AV.
Hint
Проблема решается указанием того что у нас МОЖЕТ вылетать SEH исключение
cl /EHac /O2 /Ob1 test1.cpp