Комментарии 6
А мы используем для генерации C кода Ivory eDSL для Haskell.
Вот насчет memcpy я бы поспорил, видимо автору чудесным образом удавалось избегать этой черной дыры, ожидая, правильного поведения, но:
это законно с точки зрения сях, но там есть lifetime, и там есть проблемы
компилятор может и оптимизирует это в «невыровненную загрузку», но чаще нет - ибо мемкопи для другого
Компилятор может распознать шаблон int32_t x; memcpy(&x, addr, sizeof x); и заменить его на невыровненную загрузку, если целевая архитектура такое поддерживает.
а в эпилоге функции храним все «избыточные» возвращаемые значения — кроме первого, если таковые есть — в глобальных переменных.
Добро поржаловать в многопоточность...
Насчёт 1-го примера, есть строчка:
char base = __builtin_assume_aligned((char ) m.base_addr, 4096);
Но в объявлении структуры m нет такого члена с таким именем base_addr. Видимо, там подразумевается base?...

Шесть мыслей о генерации кода на C