[all-commits] [llvm/llvm-project] 711a64: [clang][DebugInfo] Emit DW_AT_type of preferred na...

Michael Buch via All-commits all-commits at lists.llvm.org
Thu Apr 6 17:38:23 PDT 2023


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 711a64412749ae73709562b591ab1609a3ee7751
      https://github.com/llvm/llvm-project/commit/711a64412749ae73709562b591ab1609a3ee7751
  Author: Michael Buch <michaelbuch12 at gmail.com>
  Date:   2023-04-07 (Fri, 07 Apr 2023)

  Changed paths:
    M clang/lib/CodeGen/CGDebugInfo.cpp
    M clang/lib/CodeGen/CGDebugInfo.h
    A clang/test/CodeGen/preferred_name-chain.cpp
    A clang/test/CodeGen/preferred_name.cpp
    A clang/test/Modules/Inputs/gmodules-preferred-name-alias.h
    A clang/test/Modules/Inputs/gmodules-preferred-name-alias.modulemap
    A clang/test/Modules/Inputs/gmodules-preferred-name-typedef.h
    A clang/test/Modules/Inputs/gmodules-preferred-name-typedef.modulemap
    A clang/test/Modules/gmodules-preferred-name-alias.cpp
    A clang/test/Modules/gmodules-preferred-name-typedef.cpp
    M lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/shared_ptr/TestDataFormatterLibcxxSharedPtr.py
    M lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/unique_ptr/TestDataFormatterLibcxxUniquePtr.py

  Log Message:
  -----------
  [clang][DebugInfo] Emit DW_AT_type of preferred name if available

With this patch, whenever we emit a `DW_AT_type` for some declaration
and the type is a template class with a `clang::PreferredNameAttr`, we
will emit the typedef that the attribute refers to instead. I.e.,

```
0x123 DW_TAG_variable
        DW_AT_name "var"
        DW_AT_type (0x123 "basic_string<char>")

0x124 DW_TAG_structure_type
        DW_AT_name "basic_string<char>"
```
...becomes
```
0x123 DW_TAG_variable
        DW_AT_name "var"
        DW_AT_type (0x124 "std::string")

0x124 DW_TAG_structure_type
        DW_AT_name "basic_string<char>"

0x125 DW_TAG_typedef
        DW_AT_name "std::string"
        DW_AT_type (0x124 "basic_string<char>")
```

We do this by returning the preferred name typedef `DIType` when
we create a structure definition. In some cases, e.g., with `-gmodules`,
we don't complete the structure definition immediately but do so later
via `completeClassData`, which overwrites the `TypeCache`. In such cases
we don't actually want to rewrite the cache with the preferred name. We
handle this by returning both the definition and the preferred typedef
from `CreateTypeDefinition` and let the callee decide what to do with
it.

Essentially we set up the types as:
```
TypeCache[Record] => DICompositeType
ReplaceMap[Record] => DIDerivedType(baseType: DICompositeType)
```

For now we keep this behind LLDB tuning.

**Testing**

- Added clang unit-test
- `check-llvm`, `check-clang` pass
- Confirmed that this change correctly repoints
  `basic_string` references in some of my test programs.
- Will add follow-up LLDB API tests

Differential Revision: https://reviews.llvm.org/D145803


  Commit: 9ca707b69ba3802d0e31aa41c83f027027526d83
      https://github.com/llvm/llvm-project/commit/9ca707b69ba3802d0e31aa41c83f027027526d83
  Author: Michael Buch <michaelbuch12 at gmail.com>
  Date:   2023-04-07 (Fri, 07 Apr 2023)

  Changed paths:
    A lldb/test/API/lang/cpp/preferred_name/Makefile
    A lldb/test/API/lang/cpp/preferred_name/TestPreferredName.py
    A lldb/test/API/lang/cpp/preferred_name/main.cpp

  Log Message:
  -----------
  [lldb][test] Add tests for clang::PreferredNameAttr formatting

Add some tests to make sure we're formatting structures
with preferred names correctly.

Differential Revision: https://reviews.llvm.org/D145832


  Commit: 8b0033e58a49ba3be602be3892d5508b217232be
      https://github.com/llvm/llvm-project/commit/8b0033e58a49ba3be602be3892d5508b217232be
  Author: Michael Buch <michaelbuch12 at gmail.com>
  Date:   2023-04-07 (Fri, 07 Apr 2023)

  Changed paths:
    M llvm/docs/ReleaseNotes.rst

  Log Message:
  -----------
  [ReleaseNotes] DebugInfo: preferred_name attribute changes

Describes changes made in D145803.

Differential Revision: https://reviews.llvm.org/D147695


Compare: https://github.com/llvm/llvm-project/compare/b04bc87c9edc...8b0033e58a49


More information about the All-commits mailing list