class LoadedByParamClass {};
struct ParamClass {
LoadedByParamClass some_func();
};
struct SomeClass {
// LLDB stops in the constructor and then requests
// possible expression completions. This will iterate over the
// declarations in the translation unit.
// The unnamed ParamClass parameter causes that LLDB will add
// an incomplete ParamClass decl to the translation unit which
// the code completion will find. Upon inspecting the ParamClass
// decl to see if it can be used to provide any useful completions,
// Clang will complete it and load all its members.
// This causes that its member function some_func is loaded which in turn
// loads the LoadedByParamClass decl. When LoadedByParamClass
// is created it will be added to the translation unit which
// will invalidate all iterators that currently iterate over
// the translation unit. The iterator we use for code completion
// is now invalidated and LLDB crashes.
SomeClass(ParamClass) {}
};
int main() { ParamClass e; SomeClass y(e); }