labath added a comment.

In D144181#4142295 <https://reviews.llvm.org/D144181#4142295>, @Michael137 
wrote:

> We thought a bit about what it would take to link a constructor declaration 
> DIE to the various definitions (e.g., via a 
> `DW_AT_LLVM_complete_ctor_linkage_name` or `DW_AT_LLVM_complete_ctor_ref`). 
> The issue with this is that it would mess with type uniquing. E.g., what if 
> two different CUs each had a constructor declaration but differed only in 
> which definitions they linked to? Even if dsymutil were to be able to merge 
> the declarations into a single one, LLDB would still have to support the case 
> where two constructor DIEs for the same type point to different definitions 
> depending on how they were used in the corresponding object files.
>
> One could instead have some new attribute on the various constructor 
> definitions specifying which constructor type it is, and then implement 
> @pavel's suggestion of attaching multiple `asm` labels to the 
> `CXXConstructorDecl`. To support that in LLDB we'd have to do a lookup in the 
> DWARF index and filter appropriately.

What about doing both? Have the declaration DIE specify the linkage names of 
both structor types (regardless of whether they are used in a particular CU -- 
just like with "normal" functions), and then have the definition DIEs specify 
which flavour of the structor are they defining?

> But it's unclear to me whether this is much better than the proposed patch. I 
> pinged the libcxx people regarding their policy of using abi-tags on 
> structures/namespaces

Yea.. I don't know. I don't really like it because it's still very much a 
secret clang-lldb handshake that will not work with other compilers or 
debuggers. But maybe it's better because it's not a three-way libc++-clang-lldb 
handshake and has a chance of working with libraries using abi tags in a 
different way than libc++?

I'm just the peanut gallery here, so feel free to overrule me.

> Some more findings on the Clang side: a very naive way to support multiple 
> `asm` labels is to adjust the `ManglingContext::mangleName` to be aware of 
> multiple `asm` labels and pick the correct one based on the `GlobalDecl` 
> we're mangling. But we'd need to somehow match `CtorType` to the 
> `AsmLabelAttr` in question. Which is possibly doable by encoding the 
> `CtorType` into the label. E.g., `asm("C2<mangled_name>")` (?) Though that 
> seems hacky

A bit, though if the code change itself is simple/localized, then we might be 
able to get away with a new attribute, or an extension of the existing one 
(`A() __attribute((full_structor_asm("fooC1"), base_structor_asm("fooC2"))` or 
something -- it's not like people will be actually typing this code anyway...)


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D144181

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

Reply via email to