Michael137 wrote: > > I think the way it's currently written doesn't handle the case where we > > call ParseStructureLikeDIE with a forward declaration, and then later on > > with a definition DIE. For C++ structures we handle that by updating the > > UniqueTypeMap with the definition DIE, etc. We'll probably have to do what > > we do for enums and also put the definition DIE into the DIEToType map. > > In `UniqueTypeMap`, C++ is only special in that the unique name is > constructed by walking all the way up in the DIE tree to get its fully > qualified name. If we can do something similar when constructing the unique > names for objc/objc++, that map should be reusable. > > Actually, there's already a block to eagerly find the complete type when > `!is_complete_objc_class` for objc/objc++: > > https://github.com/llvm/llvm-project/blob/c9a5a6d18bd71b203798b9188f565bdf173ad91b/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp#L1713-L1715 > > . How is it different from the change in this PR? Is `is_complete_objc_class` > the same as `!is_forward_declaration`?
Yea that part of the ObjC support is particularly confusing. I added some context here: https://github.com/llvm/llvm-project/pull/120279 It previously had pretty much no coverage (and for some reason `frame var` doesn't need it). Any class that has `is_complete_objc_class` is definitely `!is_forward_declaration`, but the lack of `is_complete_objc_class` doesn't mean it's a forward declaration. There's 3 states of an objective-c type: (1) forward declaration as in other C-languages, (2) interface declarations (which aren't forward declarations in the C and C++ sense), and (3) interface implementations. If `is_complete_objc_class == true` it indicates (3). If `!is_complete_objc_class && !is_forward_declaration` then we're dealing with (2). Otherwise, `is_forward_declaration` is (1) (which never has `is_complete_objc_class` set). https://github.com/llvm/llvm-project/pull/119860 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits