qiyao wrote:

> I thought about fixing this the same way you did, but something feels wrong 
> about this. Clang is trying to do a namespace lookup here but LLDB is finding 
> global data symbols right?
> 

Yes.

> What if a program has a namespace called `foo` and a dylib that it links 
> against has a global variable in it called `foo` as well? An expression like 
> `foo::MyFunction()` shouldn't fail because another dylib has a global 
> variable of the same name.

Let me quote lldb log to explain this process, the namespace is called 
`colliding_ns`, and method is called `do_thing`.  When lldb evaluates 
`colliding_ns::do_thing(5)`:

```
1781621790.991934061  ClangExpressionDeclMap::FindExternalVisibleDecls for 
'colliding_ns' in a 'TranslationUnit'
1781621790.991945028    CEDM::FEVD Searching the root namespace
1781621790.992185116    CEDM::FEVD Found variable colliding_ns, returned
VarDecl 0x7bcda84900 <<invalid sloc>> <invalid sloc> colliding_ns 'void *&' 
static internal-linkage
````
lldb looks for `colliding_ns` and got one, from the dylib.   There is only one 
internal symbol, so `FindBestGlobalDataSymbol` won't error out.  It errors out 
when the number of internal symbol is greater than 1.

```
1781621790.992197990  ClangASTSource::FindExternalVisibleDecls on 
(ASTContext*)0x0000007bc90a0000 'Expression ASTContext for '<user expression 
0>'' for 'colliding_ns' in a 'TranslationUnit'
1781621790.992203951    CAS::FEVD Searching the root namespace
1781621790.992213964    CAS::FEVD Found namespace colliding_ns in module main
```

lldb also finds the namespace `colliding_ns`.  It hands over the result to 
clang, clang discards the non-namespace one, because clang knows it is looking 
for namespace.

```
1781621790.992255926      [ClangASTImporter] Imported 
(NamespaceDecl*)0x0000007bcda84980, named colliding_ns (from 
(Decl*)0x0000007bccf75128), metadata 18446744073709551615
1781621790.992264032      [ClangASTImporter] Decl has no origin information in 
(ASTContext*)0x0000007bcc69c000
1781621790.992269993  CompleteNamespaceMap on (ASTContext*)0x0000007BC90A0000 
'Expression ASTContext for '<user expression 0>'' Searching for namespace 
colliding_ns
1781621790.992275953    CMN[colliding_ns] Found namespace colliding_ns in 
module main
1781621790.992309093  ClangExpressionDeclMap::FindExternalVisibleDecls for 
'do_thing' in 'colliding_ns'
1781621790.992315054    CEDM::FEVD Searching namespace colliding_ns in module 
main
```

https://github.com/llvm/llvm-project/pull/203984
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to