hanchenye-llvm-project/debuginfo-tests
Vedant Kumar b572f64212 [DebugInfo] LowerDbgDeclare: Add derefs when handling CallInst users
LowerDbgDeclare inserts a dbg.value before each use of an address
described by a dbg.declare. When inserting a dbg.value before a CallInst
use, however, it fails to append DW_OP_deref to the DIExpression.

The DW_OP_deref is needed to reflect the fact that a dbg.value describes
a source variable directly (as opposed to a dbg.declare, which relies on
pointer indirection).

This patch adds in the DW_OP_deref where needed. This results in the
correct values being shown during a debug session for a program compiled
with ASan and optimizations (see https://reviews.llvm.org/D49520). Note
that ConvertDebugDeclareToDebugValue is already correct -- no changes
there were needed.

One complication is that SelectionDAG is unable to distinguish between
direct and indirect frame-index (FRAMEIX) SDDbgValues. This patch also
fixes this long-standing issue in order to not regress integration tests
relying on the incorrect assumption that all frame-index SDDbgValues are
indirect. This is a necessary fix: the newly-added DW_OP_derefs cannot
be lowered properly otherwise. Basically the fix prevents a direct
SDDbgValue with DIExpression(DW_OP_deref) from being dereferenced twice
by a debugger. There were a handful of tests relying on this incorrect
"FRAMEIX => indirect" assumption which actually had incorrect
DW_AT_locations: these are all fixed up in this patch.

Testing:

- check-llvm, and an end-to-end test using lldb to debug an optimized
  program.
- Existing unit tests for DIExpression::appendToStack fully cover the
  new DIExpression::append utility.
- check-debuginfo (the debug info integration tests)

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

llvm-svn: 338069
2018-07-26 20:56:53 +00:00
..
.arcconfig [debuginfo-tests] Support moving debuginfo-tests to llvm/projects 2017-12-12 16:54:20 +00:00
CMakeLists.txt Revert "[CMake] Sort dependency list and add safestack to it" 2018-07-18 20:10:43 +00:00
README.txt
aggregate-indirect-arg.cpp Re-revert "Refactor debuginfo-tests." 2017-11-21 01:20:28 +00:00
apple-accel.cpp [Darwin] Specify DWARF 2/4 when running apple accelerator tests. 2018-02-26 20:56:45 +00:00
asan-blocks.c Revert "Temporarily pin tests to DWARF v2 until a more recent version of LLDB" 2017-12-07 19:40:31 +00:00
asan-deque.cpp [DebugInfo] LowerDbgDeclare: Add derefs when handling CallInst users 2018-07-26 20:56:53 +00:00
asan.c Revert "Temporarily pin tests to DWARF v2 until a more recent version of LLDB" 2017-12-07 19:40:31 +00:00
block_var.m Re-revert "Refactor debuginfo-tests." 2017-11-21 01:20:28 +00:00
blocks.m Re-revert "Refactor debuginfo-tests." 2017-11-21 01:20:28 +00:00
ctor.cpp Re-revert "Refactor debuginfo-tests." 2017-11-21 01:20:28 +00:00
dbg-arg.c Re-revert "Refactor debuginfo-tests." 2017-11-21 01:20:28 +00:00
foreach.m Re-revert "Refactor debuginfo-tests." 2017-11-21 01:20:28 +00:00
forward-declare-class.cpp Re-revert "Refactor debuginfo-tests." 2017-11-21 01:20:28 +00:00
lit.cfg.py [debuginfo-tests] Support moving debuginfo-tests to llvm/projects 2017-12-12 16:54:20 +00:00
lit.local.cfg Re-revert "Refactor debuginfo-tests." 2017-11-21 01:20:28 +00:00
lit.site.cfg.py.in [debuginfo-tests] Support moving debuginfo-tests to llvm/projects 2017-12-12 16:54:20 +00:00
llgdb.py Re-revert "Refactor debuginfo-tests." 2017-11-21 01:20:28 +00:00
nested-struct.cpp Re-revert "Refactor debuginfo-tests." 2017-11-21 01:20:28 +00:00
nrvo-string.cpp Revert "Temporarily pin tests to DWARF v2 until a more recent version of LLDB" 2017-12-07 19:40:31 +00:00
safestack.c Revert "Temporarily pin tests to DWARF v2 until a more recent version of LLDB" 2017-12-07 19:40:31 +00:00
sret.cpp Re-revert "Refactor debuginfo-tests." 2017-11-21 01:20:28 +00:00
stack-var.c Revert "Temporarily pin tests to DWARF v2 until a more recent version of LLDB" 2017-12-07 19:40:31 +00:00
static-member-2.cpp Re-revert "Refactor debuginfo-tests." 2017-11-21 01:20:28 +00:00
static-member.cpp Re-revert "Refactor debuginfo-tests." 2017-11-21 01:20:28 +00:00
test_debuginfo.pl [debuginfo-tests] Always use the system python to invoke llgdb.py. 2018-06-10 19:38:26 +00:00
vla.c Re-revert "Refactor debuginfo-tests." 2017-11-21 01:20:28 +00:00

README.txt

                                                                   -*- rst -*-
This is a collection of tests to check debugging information generated by 
compiler. This test suite can be checked out inside clang/test folder. This 
will enable 'make test' for clang to pick up these tests. Typically, test 
cases included here includes debugger commands and intended debugger output 
as comments in source file using DEBUGGER: and CHECK: as prefixes respectively.

For example::

  define i32 @f1(i32 %i) nounwind ssp {
  ; DEBUGGER: break f1
  ; DEBUGGER: r
  ; DEBUGGER: p i 
  ; CHECK: $1 = 42 
  entry:
  }

is a testcase where the debugger is asked to break at function 'f1' and 
print value of argument 'i'. The expected value of 'i' is 42 in this case.