Debug Info: Move the complex expression handling (=the remainder) of
authorAdrian Prantl <aprantl@apple.com>
Tue, 13 Jan 2015 23:39:11 +0000 (23:39 +0000)
committerAdrian Prantl <aprantl@apple.com>
Tue, 13 Jan 2015 23:39:11 +0000 (23:39 +0000)
commit57ed5ffc767ca2df921d2e1c1ea8c8b08926a3c6
tree1eb6358c8d4bdc11b9c848aa914498eab5e78bda
parent656da67bc009793105a62a468fdad8224c625b47
Debug Info: Move the complex expression handling (=the remainder) of
emitDebugLocValue() into DwarfExpression.

Ought to be NFC, but it actually uncovered a bug in the debug-loc-asan.ll
testcase. The testcase checks that the address of variable "y" is stored
at [RSP+16], which also lines up with the comment.
It also check(ed) that the *value* of "y" is stored in RDI before that,
but that is actually incorrect, since RDI is the very value that is
stored in [RSP+16]. Here's the assembler output:

movb 2147450880(%rcx), %r8b
#DEBUG_VALUE: bar:y <- RDI
cmpb $0, %r8b
movq %rax, 32(%rsp)          # 8-byte Spill
movq %rsi, 24(%rsp)          # 8-byte Spill
movq %rdi, 16(%rsp)          # 8-byte Spill
.Ltmp3:
#DEBUG_VALUE: bar:y <- [RSP+16]

Fixed the comment to spell out the correct register and the check to
expect an address rather than a value.

Note that the range that is emitted for the RDI location was and is still
wrong, it claims to begin at the function prologue, but really it should
start where RDI is first assigned.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225851 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/AsmPrinter/DwarfDebug.cpp
lib/CodeGen/AsmPrinter/DwarfDebug.h
lib/CodeGen/AsmPrinter/DwarfExpression.cpp
lib/CodeGen/AsmPrinter/DwarfExpression.h
test/DebugInfo/X86/debug-loc-asan.ll