- 1
- 2
- 3
- 4
- 5
- 6
void receivePtrs(void **);
int main() {
L:
receivePtrs((void *[]){ &&L, 0, 0 });
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
0
void receivePtrs(void **);
int main() {
L:
receivePtrs((void *[]){ &&L, 0, 0 });
}
что делает этот код?
У меня про это был говнокод https://govnokod.ru/22794 -> https://govnokod.ru/22794#comment384245 -> https://gcc.gnu.org/legacy-ml/gcc-help/2017-04/msg00051.html
> the compiler treats labels similarly to automatic variables, meaning that their address is considered valid only until the function returns. Optimizations that clone functions need to duplicate labels, and that will break code that smuggles label addresses to outer frames. See PR 80053 comment 2 for a sample that gets "miscompiled": https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80053#c2
Так что надо запрещать инлайн для такой хуйни.
Можно и к инлайну прикрутить такое говно, если только хранить не непосредственный адрес, а дельту между "место где у нас goto туда или сюда" и "метка". И тогда можно относительно регистра "RIP" переходить по такому-то смещению. Важно только чтоб везде одинаковый кусок с равными "расстояниями" между метками и goto заинлайнивался.
https://govnokod.xyz/_24763/#comment-390727
У меня там и && были, и аналог «computed goto» я наговнокодил с помощью патча стека.
Цикл:
> ...
> _next(&i);
Какой BASIC )))
Очень зачётное говно.
Подтверждаю.
В приницпе можно прыгнуть внутрь функции, что-то выполнить, а потом вернуться обратно. А-ля GOSUB / RETURN.