Сопрограммы и --fsanitize=address
От: ELazin http://rsdn.ru/forum/prj/6225353.1
Автор: ELazin
Дата: 26.10.15
Дата: 15.07.15 15:21
Оценка:
Обнаружил такой странный баг: в случае если приложение собрано с флагом, включающим ASan (--fsanitize=address) в корутинах перестают нормально обрабатываться исключения.

код вот такой:
#define BOOST_COROUTINES_BIDIRECT
#include <iostream>
#include <boost/coroutine/all.hpp>

typedef boost::coroutines::coroutine< void() > Coroutine;
typedef typename Coroutine::caller_type Caller;

void worker(Caller& caller) {
    try {
        std::cout << "about to throw exception" << std::endl;
        throw std::runtime_error("weeeehaaaa");
    } catch (const std::runtime_error& e) {
        std::cout << e.what() << std::endl;
    }
    std::cout << "Done!" << std::endl;
}

int main()
{
    Coroutine coro(&worker);
    std::cout << "done" << std::endl;
    return 0;
}


Все работает как нужно если не включать ASan, если же его включить, то управление никогда не попадает в обработчик и приложение крашится. Под отладчиком и с включенным ASan-ом все работает как положено. Как можно это вылечить?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.