170 похожих чатов

Встретился с такой... "проблемкой" Существует корутина-генератор try { for(auto x : generator())

use(x);
} catch(...) {
// здесь вызываем .what на исключении или компилятор вызывает его деструктор
// SEGFAULT
}
Если в процессе генерации вылетает исключение в генераторе, то как бы то ни было сначала вызовется деструктор генератора, в общем в любом случае фрейм корутины будет разрушен...
И вот проблема... На этом фрейме, внезапно, после throw оказывается значение исключения!

Поэтому любое обращение, например вставленный компилятором же деструктор, вызывает уб и сегфолт!

Вопрос: куда обращаться по поводу такого замечательного бага стандарта/реализации исключений/корутин ??
Или возможно я не вижу какого то способа этого обойти?

36 ответов

43 просмотра

откуда у тебя в катч... методы вообще

Kelbon- Автор вопроса
feedable
откуда у тебя в катч... методы вообще

ну сделай по типу катч, неважно

Kelbon
ну сделай по типу катч, неважно

значение исключения вообще на стеке не лежит

Kelbon- Автор вопроса

репортите в кланг, тегайте @ChuanqiXu9

Kelbon
ну скажи это компилятору

ну как минимум итаник так делает у тебя уб где-то в другом месте

Kelbon- Автор вопроса
feedable
ну как минимум итаник так делает у тебя уб где-то...

нет у меня там уб, всё максимально просто, throw делается

Kelbon- Автор вопроса

ну факт, я пишу .what получаю сегфолт

да, у тебя уб в другом месте

Kelbon- Автор вопроса
feedable
да, у тебя уб в другом месте

да нет никакого уб ну ты даже не видел код

Kelbon
да нет никакого уб ну ты даже не видел код

так а почему до сих пор нет ссылки на годболт

Kelbon- Автор вопроса
Vlad
так а почему до сих пор нет ссылки на годболт

потому что это сложно переносить всё очевидно

Kelbon
потому что это сложно переносить всё очевидно

если не перенесете, то вряд ли кто-то будет этим заниматься

Dmitriy [Отпуск]
Не обязательно. Может и лежать

наличие ексепшн птра впринципе убирает эту возможность

Dmitriy [Отпуск]
Не убирает. Объект копируется

нет, это должен быть тот же объект

Dmitriy [Отпуск]
Пруф? Что именно тот же

std::exception_ptr is a nullable pointer-like type that manages an exception object which has been thrown and captured with std::current_exception. из цппрефа

Kelbon- Автор вопроса
Kelbon- Автор вопроса
feedable
std::exception_ptr is a nullable pointer-like type...

там может быть копирование

feedable
std::exception_ptr is a nullable pointer-like type...

current_exception можно вызвать несколько раз - а нигде нет требований к recounted исключениям Такая формулировка не обязывает the same object

Kelbon
ну факт, я пишу .what получаю сегфолт

кстати хорошо что я зашел http://eel.is/c++draft/except.throw#4.1

Kelbon- Автор вопроса

а?

Kelbon
а?

на момент катча эксепшн должен жить еще

Kelbon- Автор вопроса
Kelbon
ну конечно должен

тоесть он не может жить на фрейме корутины, не так ли?

Kelbon- Автор вопроса
feedable
тоесть он не может жить на фрейме корутины, не так...

? Компилятор пусть решает где ему жить, я то на это как повлияю?

Kelbon
? Компилятор пусть решает где ему жить, я то на эт...

ну у компилятора нет опции решить чтоб оно жило в фрейме выше чем катч

Kelbon- Автор вопроса
feedable
ну у компилятора нет опции решить чтоб оно жило в ...

мой вопрос и заключается в том как вообще с этим жить, исключение из корутины получается не может быть обработано адекватно никак

Kelbon- Автор вопроса
Dmitriy [Отпуск]
Не совсем так

совсем так, потому что иначе сторадж улетит

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта