| 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); } |