aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--flake.nix11
-rw-r--r--meson.build10
-rw-r--r--package.nix4
3 files changed, 21 insertions, 4 deletions
diff --git a/flake.nix b/flake.nix
index 662469479..46f9e43e8 100644
--- a/flake.nix
+++ b/flake.nix
@@ -99,9 +99,10 @@
];
stdenvs = [
- "gccStdenv"
+ # see assertion in package.nix why these two are disabled
+ # "stdenv"
+ # "gccStdenv"
"clangStdenv"
- "stdenv"
"libcxxStdenv"
"ccacheStdenv"
];
@@ -121,7 +122,11 @@
name = "${stdenvName}Packages";
value = f stdenvName;
}) stdenvs
- );
+ )
+ // {
+ # TODO delete this and reënable gcc stdenvs once gcc compiles kj coros correctly
+ stdenvPackages = f "clangStdenv";
+ };
# Memoize nixpkgs for different platforms for efficiency.
nixpkgsFor = forAllSystems (
diff --git a/meson.build b/meson.build
index b015cc606..f89f5a016 100644
--- a/meson.build
+++ b/meson.build
@@ -167,10 +167,18 @@ endif
# 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.
+#
+# gcc 13 does not compile capnp coroutine code correctly. a newer version
+# may fix this. (cf. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102051)
+# we allow gcc 13 here anyway because CI uses it for clang-tidy, and when
+# the compiler crashes outright if won't produce any bad binaries either.
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.'
+ 'GCC is known to miscompile coroutines, use clang.'
)
+if cxx.get_id() == 'gcc'
+ warning('GCC is known to crash while building coroutines, use clang.')
+endif
# Translate some historical and Mesony CPU names to Lixy CPU names.
diff --git a/package.nix b/package.nix
index e5ab5eff0..eebf222b7 100644
--- a/package.nix
+++ b/package.nix
@@ -90,6 +90,10 @@
capnproto-lix = capnproto.overrideAttrs { CXXFLAGS = "-std=c++20"; };
},
}:
+
+# gcc miscompiles coroutines at least until 13.2, possibly longer
+assert stdenv.cc.isClang || lintInsteadOfBuild;
+
let
inherit (__forDefaults) canRunInstalled;
inherit (lib) fileset;