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

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

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

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

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

36 ответов

14 просмотров

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

MSVC?

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

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

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

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

читать файл максимально быстро? странный вопрос))
zamtmn
52
всем привет! углубившись в плюсы и начав изучать реверсинг понял, что без асм'а никуда со своими высокоабстрактными представлениями начал изучать механизмы асма, и не совсем п...
9
буквально один оставшийся вопрос при выполнении строчки mov eax, 5 операнд "5" будет присутствовать где-либо в памяти (любой), кроме как в памяти блока .code? подвопрос: как...
12
Всем ку. Подскажите, если задекларировал массив так: int arr[10] = {1, 2, 3, 4}, то в arr[4] будет мусор или нуль?
Sasha K
14
я не понимаю mov [r11+8],rcx и прочие. мы записываем значение из rcx, куда?
Bor
15
у меня такой вопрос про память в x86 возник, может кто пояснить?.. у процессора есть (как минимум) 3 типа адресов (названия "п1", "п2", "п3" --- мои, чтобы проще было дальше)...
Toideng
5
а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
А какие расширения активно используются в промышленности? Именно идейные, по типу гадт, а не всякие оверлоадедстрингс
Степан
11
у процессора есть (как минимум) 3 типа адресов (названия "п1", "п2", "п3" --- мои, чтобы проще было дальше): - "п1" --- виртуальный адрес, то есть тот, который ресолвится в "п...
Toideng
3
Guys Who’s kurdish on this group?
Hiwa Amiri
11
Карта сайта