VC 6.0, обработка исключений
От: Alexey Chen Чили  
Дата: 20.02.04 12:13
Оценка:
Наткнулся на фичу оптимизатора 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
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.