Last week I updated my Cygwin environment and this week I recompiled Kakoune. Now when I try to do a backward match with the ‘m’ key I get a segfault. I thought maybe it was just something to do with the latest release, but I’ve tried releases all the way back to 2019 and they all have the same problem. I know I’ve used a more recent release without issue, so I’m thinking it’s my build tools. I’m using g++ (GCC) 11.2.0, below is some data on the fault.
I’ve tried debugging this myself but I don’t have a lot of experience debugging C++ templates. Breaking at the select() and stepping down to the read_codepoint() is a tedious process. At frame 1, iterator ‘it’ looks fine so I’m thinking as the iterator is advanced it becomes invalid at some point. But I’m also thinking that my compiler/environment is messing this up somehow since I seem to be the only one with the issue.
Solved my own problem. Always happens after I post . I downgraded g++ to g++ (GCC) 10.2.0 in the Cygwin repo and it works properly now. I will say trying to compile master does result in this lovely error, but the last release tag works.
g++ -D_XOPEN_SOURCE=700 -O3 -pedantic -std=c++2a -g -Wall -Wextra -Wno-unused-parameter -Wno-sign-compare -Wno-address -Wno-init-list-lifetime -MD -MP -MF .client.opt.d -c -o .client.opt.o client.cc
In file included from face_registry.hh:5,
from scope.hh:5,
from buffer.hh:12,
from selection.hh:4,
from context.hh:4,
from input_handler.hh:6,
from client.hh:7,
from client.cc:1:
utils.hh: In instantiation of ‘Kakoune::FunctionRef<Res(Args ...)>::FunctionRef(Target&&) [with Target = Kakoune::Client::generate_mode_line() const::<lambda(Kakoune::String)>; Res = Kakoune::String; Args = {Kakoune::String}]’:
client.cc:161:77: required from here
utils.hh:181:31: internal compiler error: in tsubst_pack_expansion, at cp/pt.c:12928
181 | requires not std::is_same_v<FunctionRef, std::remove_cvref_t<Target>>;
| ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Please submit a full bug report,
with preprocessed source if appropriate.
See <https://gcc.gnu.org/bugs/> for instructions.
make: *** [Makefile:104: .client.opt.o] Error 1
The README on the master branch says “GCC >= 10.3”, so it’s not surprising that 10.2.0 fails to build correctly. It’s weird that 11.2.0 fails to build correctly, though - I’ve been building with that version on Debian Linux and Kakoune seems fine - both m and <a-m> work for me.
On Cygwin, can you build Kakoune with make debug=yes sanitize=address or make debug=yes sanitize=undefined? If you can, do those builds crash in a more interesting/useful fashion?
Sanitize isn’t available for Cygwin g++ 11, but adding the debug flag prevents the ‘m’ segfault. I haven’t fully tested it yet, but I’ll install the debug version and use it for a few days to see if it crashes.
Just pulled up to v2022.10.31 and g++ 11.3.0 and the debug flag can’t help me now. kakoune is segfaulting with this dump. I’ll try debugging this after the new year, unless someone else as a bit of insight.