zequanwu added inline comments.

================
Comment at: lldb/source/Plugins/SymbolFile/NativePDB/UdtRecordCompleter.cpp:459
+      uint64_t end_offset = offset + fields.back()->bit_size;
+      parent->fields.push_back(fields.back());
+      end_offset_map[end_offset].push_back(parent);
----------------
labath wrote:
> Can `parent` be a union here? Would the algorithm still be correct?
`parent` could only be union when the top level record is a union (at this line 
`Member *parent = &record;`). That's the only case when we add an union into 
`end_offset_map`. In that case, all the fields would start at the same offset 
and we only iterate the loop `for (auto &pair : fields) {` once and then we are 
done. 
Otherwise, we only insert {end offset, struct/field} into `end_offset_map` 
where field must be within an union.


================
Comment at: lldb/source/Plugins/SymbolFile/NativePDB/UdtRecordCompleter.cpp:471
+      } else {
+        for (auto &field : fields) {
+          parent->fields.push_back(field);
----------------
labath wrote:
> IIUC, this code is reached when the `parent` object is a union. However, the 
> parent is chosen such that it ends before the start of these new fields? 
> Therefore its start address will be before the start of these fields as well. 
> Is it correct to add the fields to the union under these circumstances, or am 
> I misunderstanding something?
This is a special case to handle the case when top level record is an union. 
That's the only case we would reach here. This is to avoid adding unnecessary 
nested union. For example, the unit test `TestAnonymousUnionInUnion` would 
become the following if we always add an anonymous union:
```
union {
  union {
    m1;
    m2;
    m3;
    m4;
  }
}
```


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D134849/new/

https://reviews.llvm.org/D134849

_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to