use(x);
} catch(...) {
// здесь вызываем .what на исключении или компилятор вызывает его деструктор
// SEGFAULT
}
Если в процессе генерации вылетает исключение в генераторе, то как бы то ни было сначала вызовется деструктор генератора, в общем в любом случае фрейм корутины будет разрушен...
И вот проблема... На этом фрейме, внезапно, после throw оказывается значение исключения!
Поэтому любое обращение, например вставленный компилятором же деструктор, вызывает уб и сегфолт!
Вопрос: куда обращаться по поводу такого замечательного бага стандарта/реализации исключений/корутин ??
Или возможно я не вижу какого то способа этого обойти?
откуда у тебя в катч... методы вообще
ну сделай по типу катч, неважно
значение исключения вообще на стеке не лежит
ну скажи это компилятору
репортите в кланг, тегайте @ChuanqiXu9
ну как минимум итаник так делает у тебя уб где-то в другом месте
нет у меня там уб, всё максимально просто, throw делается
ну факт, я пишу .what получаю сегфолт
да, у тебя уб в другом месте
да нет никакого уб ну ты даже не видел код
ну правильно, ты не скинул код
так а почему до сих пор нет ссылки на годболт
потому что это сложно переносить всё очевидно
Не обязательно. Может и лежать
если не перенесете, то вряд ли кто-то будет этим заниматься
MSVC?
наличие ексепшн птра впринципе убирает эту возможность
Не убирает. Объект копируется
нет, это должен быть тот же объект
Пруф? Что именно тот же
std::exception_ptr is a nullable pointer-like type that manages an exception object which has been thrown and captured with std::current_exception. из цппрефа
там может быть копирование
current_exception можно вызвать несколько раз - а нигде нет требований к recounted исключениям Такая формулировка не обязывает the same object
кстати хорошо что я зашел http://eel.is/c++draft/except.throw#4.1
а?
ну конечно должен
тоесть он не может жить на фрейме корутины, не так ли?
? Компилятор пусть решает где ему жить, я то на это как повлияю?
ну у компилятора нет опции решить чтоб оно жило в фрейме выше чем катч
мой вопрос и заключается в том как вообще с этим жить, исключение из корутины получается не может быть обработано адекватно никак
нет, может у тебя уб в другом месте
да нет у меня
совсем так, потому что иначе сторадж улетит
Обсуждают сегодня