JDevlieghere wrote:

> I think I'm missing something. Instead of removing it at the end of 
> `ResolveTypeUID`, you remove it right _after_ the call to `ResolveTypeUID`. 
> What's the difference?

I should've mentioned that this function is (indirectly) recursive, because 
that's totally fine (e.g. a struct having a pointer to itself). Here's the 
stack trace from ASan that illustrates this. 

```
lldb_private::SymbolFileCTF::ResolveTypeUID(unsigned long long) 
SymbolFileCTF.cpp:1022
lldb_private::SymbolFileCTF::CreateModifier(lldb_private::CTFModifier const&) 
SymbolFileCTF.cpp:378
lldb_private::SymbolFileCTF::CreateType(lldb_private::CTFType*) 
SymbolFileCTF.cpp:583
lldb_private::SymbolFileCTF::ResolveTypeUID(unsigned long long) 
SymbolFileCTF.cpp:1001
lldb_private::SymbolFileCTF::CompleteType(lldb_private::CompilerType&) 
SymbolFileCTF.cpp:531
lldb_private::Type::ResolveCompilerType(lldb_private::Type::ResolveState) 
Type.cpp:733
lldb_private::Type::GetFullCompilerType() Type.cpp:773
lldb_private::SymbolFileCTF::CreateTypedef(lldb_private::CTFTypedef const&) 
SymbolFileCTF.cpp:421
lldb_private::SymbolFileCTF::CreateType(lldb_private::CTFType*) 
SymbolFileCTF.cpp:585
lldb_private::SymbolFileCTF::ResolveTypeUID(unsigned long long) 
SymbolFileCTF.cpp:1001
```

In the process of resolving the type, we have to create another type, which 
includes a type modifier of the original type.

https://github.com/llvm/llvm-project/pull/151586
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to