[PATCH] D99693: Update the linkage name of coro-split functions where applicable

Adrian Prantl via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Apr 1 09:56:46 PDT 2021


aprantl added inline comments.


================
Comment at: llvm/lib/Transforms/Coroutines/CoroSplit.cpp:866
+    // linkage name and asserts that they are identical.
+    if (!SP->getDeclaration())
+      SP->replaceLinkageName(MDString::get(Context, NewF->getName()));
----------------
ChuanqiXu wrote:
> aprantl wrote:
> > kastiglione wrote:
> > > Is `!SP->getDeclaration()` the implicit check for swift but not C++?
> > Yes. If you have a top-level C++ coroutine — and I have no idea if that's a thing, you would get the "real" linkage name.
> Does this mean the DISubprogram for every C++ coroutine did contain a declaration? May I ask where the constraint is?
The problem we're working around here is (as far as I understand) a limitation of LLVM itself. The `distinct DISubprogram`s for C++ *methods* always have a a `declaration:` pointing into the uniqued `DISubprogram` in the type system that contains their abstract declaration. This is roughly equivalent to the `DW_AT_specification`  in the DWARF for the concrete method pointing to the abstract declaration that holds all the shared attributes.

When emitting a `DW_AT_specification` attribute AsmPrinter asserts that all attributes in the `distinct DISubprogram` are equivalent to the ones in the abstract `DISubprogram` declaration. That's why we can't modify the linkage name for a DISubprogram that had a `declaration:` specified, because it would clash with the linkage name in the specification.

```
0x200:
DW_TAG_subprogram // abstract decl
  DW_AT_linkage_name (foo)
  DW_TAG_formal_paramater ...
  ...

DW_TAG_subprogram // concrete instance 1
  DW_AT_low_pc (0x1000)
  ...
  DW_AT_specification (0x200) // points to decl for common  bits

DW_TAG_subprogram // concrete instance 2
  DW_AT_low_pc (0x1500)
  ...
  DW_AT_specification (0x200) // points to decl for common  bits
```


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

https://reviews.llvm.org/D99693



More information about the llvm-commits mailing list