Skip to content

`system-test` fails to build on GHC HEAD due to ghc-debug-stub

Recent CI jobs currently fail the HEAD test-packages job due to the system-test component failing. Specifically, it arises when trying to build ghc-debug-stub, as seen in this CI job:

[1 of 1] Compiling GHC.Debug.Stub   ( src/GHC/Debug/Stub.hs, /builds/ghc/head.hackage/ci/run/test-system-test/dist-newstyle/build/x86_64-linux/ghc-9.11.20240926/ghc-debug-stub-0.6.0.0/build/GHC/Debug/Stub.o, /builds/ghc/head.hackage/ci/run/test-system-test/dist-newstyle/build/x86_64-linux/ghc-9.11.20240926/ghc-debug-stub-0.6.0.0/build/GHC/Debug/Stub.dyn_o )
WARNING:
  Glomming in
  GHC.Debug.Stub:
    UD {s4zA :->, s4z7 :-> OnceL1!}
      ud_z_tail [s4z7 :-> OneOccL{1,Tail 3}, s4zA :-> OneOccL{1,Tail 3}]
  Call stack:
      CallStack (from HasCallStack):
        warnPprTrace, called at compiler/GHC/Core/Opt/OccurAnal.hs:95:5 in ghc-9.11-inplace:GHC.Core.Opt.OccurAnal
Building     unordered-containers-0.2.20 (lib)
Building     time-compat-1.9.7 (lib)
In file included from cbits/stub.cpp:19:0: error: 
cbits/trace.h:4:42: error:
     warning: ‘PRINTF’ is an unrecognized format function type [-Wformat=]
        4 |     __attribute__((format (PRINTF, 1, 2)));
          |                                          ^
  |
4 |     __attribute__((format (PRINTF, 1, 2)));
  |                                          ^
cbits/stub.cpp: In function ‘int handle_command(Socket&, const char*, uint32_t)’:
cbits/stub.cpp:767:33: error:
     error: invalid conversion from ‘uint32_t’ {aka ‘unsigned int’} to ‘const char*’ [-fpermissive]
      767 |           write_string(resp, ip.closure_desc);
          |                              ~~~^~~~~~~~~~~~
          |                                 |
          |                                 uint32_t {aka unsigned int}
    |
767 |           write_string(resp, ip.closure_desc);
    |                                 ^
cbits/stub.cpp:348:55: error:
     note:   initializing argument 2 of ‘void write_string(Response&, const char*)’
      348 | static void write_string(Response& resp, const char * s){
          |                                          ~~~~~~~~~~~~~^
    |
348 | static void write_string(Response& resp, const char * s){
    |                                                       ^
`g++' failed in phase `C++ Compiler'. (Exit code: 1)

This doesn't cause the CI to fail outright, since test-packages jobs are allowed to fail. Still, this indicates a problem that might need further investigation.

cc @mpickering