fallkrum added a comment. In D88483#2342225 <https://reviews.llvm.org/D88483#2342225>, @jingham wrote:
> In D88483#2341538 <https://reviews.llvm.org/D88483#2341538>, @fallkrum wrote: > >> Thanks a lot Jim for explanations, now it makes sense to me. >> Have one more question on class Type. Writing API test for the patch defined >> 2 functions like this: >> >> void *func1(int) { >> return NULL; >> } >> >> void *func2(int) { >> return NULL; >> } >> >> Tried to find function type using target.FindFirstType('func1') and got >> nothing as a result. Call to module.GetTypes().GetTypeAtIndex(0).GetName() >> contained: >> "void *(int)". Looking through clang::Decls found out that >> clang::FunctionDecl is child of clang::ValueDecl and it finally became clear >> to me that "func1", "func2" are not types at all but simply symbols >> (variables?) of the same type "void *(int)". Therefore module where above 2 >> functions were declared contained only 1 type "void *(int)". Investigating >> how DWARFASTParser works noticed that it do generates 2 Type instances for 2 >> defined functions with m_name variable set to "func1", "func2" respectively >> and m_compiler_type referencing the same "void *(int)" (but not in it's >> string representation of course). >> So the question is: Does class Type represents not only a type but also a >> variable (symbol or identifier, don't know how to name it correctly in this >> situation)? > > My understanding is that functions have a type but aren't types themselves. > I'm not sure where you are seeing us make Type's for functions, can you say > more about that? I can describe how to see it really happens. Attached a compiled executable with debug info in a separate file. Defined only 1 function in function_type.c: int main (int argc, const char * argv[]) { return 0; } Steps: 1. launch lldb with executable from attachment (i do it from command line: lldb /path/to/function_type) 2. attach to lldb with another debugger. 3. in another debugger set breakpoint on Type constructor: lldb_private::Type::Type(unsigned long long, lldb_private::SymbolFile*, lldb_private::ConstString, llvm::Optional<unsigned long long>, lldb_private::SymbolContextScope*, unsigned long long, lldb_private::Type::EncodingDataType, lldb_private::Declaration const&, lldb_private::CompilerType const&, lldb_private::Type::ResolveState, unsigned int) (i set it slightly below, on "if (byte_size) {", on my version of sources line 154) 4. continue another debugger 5. in lldb with function_type target execute command: lldb.target.GetModuleAtIndex(0).GetTypes().GetSize() 6. After several continuations it should stop inside Type constructor with input name = "main" and compiler_type for function type. 7. e compiler_type.GetTypeName() will give result: "int (int, const char **)" Hope this will help. F13396272: function_type.zip <https://reviews.llvm.org/F13396272> Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D88483/new/ https://reviews.llvm.org/D88483 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits