Author: stella.stamenova
Date: Mon Jul  9 10:36:33 2018
New Revision: 336564

URL: http://llvm.org/viewvc/llvm-project?rev=336564&view=rev
Log:
Retrieve a function PDB symbol correctly from nested blocks

Summary:
This patch fixes a problem with retrieving a function symbol by an address in a 
nested block. In the current implementation of ResolveSymbolContext function it 
retrieves a symbol with PDB_SymType::None and then checks if found symbol's tag 
equals to PDB_SymType::Function. So, if nested block's symbol was found, 
ResolveSymbolContext does not resolve a function.

It is very simple to reproduce this. For example, in the next program

```
int main() {
  auto r = 0;
  for (auto i = 1; i <= 10; i++) {
    r += i & 1 + (i - 1) & 1 - 1;
  }

  return r;
}
```

if we will stop inside the cycle and will do a backtrace, the top element will 
be broken. But how we can test this? I thought to add an option to lldb-test to 
allow search a function by address, but the address may change when the 
compiler will be changed.

Patch by: Aleksandr Urakov

Reviewers: asmith, labath, zturner

Reviewed By: asmith, labath

Subscribers: stella.stamenova, llvm-commits

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

Modified:
    lldb/trunk/lit/SymbolFile/PDB/function-nested-block.test

Modified: lldb/trunk/lit/SymbolFile/PDB/function-nested-block.test
URL: 
http://llvm.org/viewvc/llvm-project/lldb/trunk/lit/SymbolFile/PDB/function-nested-block.test?rev=336564&r1=336563&r2=336564&view=diff
==============================================================================
--- lldb/trunk/lit/SymbolFile/PDB/function-nested-block.test (original)
+++ lldb/trunk/lit/SymbolFile/PDB/function-nested-block.test Mon Jul  9 
10:36:33 2018
@@ -4,4 +4,4 @@ RUN: lld-link /debug:full /nodefaultlib
 RUN: lldb-test symbols -find=function -file FunctionNestedBlockTest.cpp -line 
4 %t.exe | FileCheck %s
 
 CHECK: Found 1 functions:
-CHECK: name = "{{.*}}", mangled = "_main"
+CHECK: name = "{{.*}}", mangled = "{{_?}}main"


_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to