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

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

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

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

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

36 ответов

40 просмотров

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

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 [Отпуск]
Не совсем так

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

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

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

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Раз начали говорить про embassy, то присоединюсь со своими парой вопросов. 1) Есть ли сопоставимые аналоги для асинхронного кода в emdebbed? 2) Можно ли внутри задач embassy ...
NI_isx
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Карта сайта