[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