aboutsummaryrefslogtreecommitdiff
path: root/meson.build
diff options
context:
space:
mode:
authoreldritch horrors <pennae@lix.systems>2024-03-19 18:02:22 +0100
committereldritch horrors <pennae@lix.systems>2024-07-03 11:46:53 +0000
commit73ddc4540f5f85ef9e01be4e2e362c6c88e47fa3 (patch)
tree6f6ff06799a365d2e2111c8b735111fdd587e166 /meson.build
parent45ac449d3970bc6abc4c04e0b3a3b6768a9cb753 (diff)
libutil: generator type with on-yield value mapping
this will be the basis of non-boost coroutines in lix. anything that is a boost coroutine *should* be representable with a Generator coroutine, and many things that are not currently boost coroutines but behave much like one (such as, notably, serializers) should be as well. this allows us to greatly simplify many things that look like iteration but aren't. Change-Id: I2cebcefa0148b631fb30df4c8cfa92167a407e34
Diffstat (limited to 'meson.build')
-rw-r--r--meson.build10
1 files changed, 10 insertions, 0 deletions
diff --git a/meson.build b/meson.build
index 7d8a3a315..a208151ac 100644
--- a/meson.build
+++ b/meson.build
@@ -142,6 +142,16 @@ else
cpp_pch = []
endif
+# gcc 12 is known to miscompile some coroutine-based code quite horribly,
+# causing (among other things) copies of move-only objects and the double
+# frees one would expect when the objects are unique_ptrs. these problems
+# often show up as memory corruption when nesting generators (since we do
+# treat generators like owned memory) and will cause inexplicable crashs.
+assert(
+ cxx.get_id() != 'gcc' or cxx.version().version_compare('>=13'),
+ 'GCC 12 and earlier are known to miscompile lix coroutines, use GCC 13 or clang.'
+)
+
# Translate some historical and Mesony CPU names to Lixy CPU names.
# FIXME(Qyriad): the 32-bit x86 code is not tested right now, because cross compilation for Lix