aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Object/Archive.cpp
diff options
context:
space:
mode:
authorFelipe de Azevedo Piovezan <fpiovezan@apple.com>2023-01-19 12:02:28 -0300
committerFelipe de Azevedo Piovezan <fpiovezan@apple.com>2023-01-30 11:17:36 -0500
commit055f2f04e658c7dddd1fc261e5e0c0bd136cc2b5 (patch)
tree33c02305b5d89e5da615695e229d1b2324c51bc7 /llvm/lib/Object/Archive.cpp
parent8f6c623e874624c1f247f93bf457d5196a84cec6 (diff)
downloadllvm-055f2f04e658c7dddd1fc261e5e0c0bd136cc2b5.zip
llvm-055f2f04e658c7dddd1fc261e5e0c0bd136cc2b5.tar.gz
llvm-055f2f04e658c7dddd1fc261e5e0c0bd136cc2b5.tar.bz2
[mem2reg][debuginfo] Handle op_deref when converting dbg.declare
The conversion of dbg.declare into dbg.values doesn't take into account the DIExpression attached to the intrinsic. In particular, when converting: ``` store %val, ptr %alloca dbg.declare(ptr %alloca, !SomeVar, !DIExpression()) ``` Mem2Reg will try to figure out if `%val` has the size of `!SomeVar`. If it does, then a non-undef dbg.value is inserted: ``` dbg.value(%val, !SomeVar, !DIExpression()) ``` This makes sense: the alloca is _the_ address of the variable. So a store to the alloca is a store to the variable. However, if the expression in the original intrinsic is a `DW_OP_deref`, this logic is not applicable: ``` store ptr %val, ptr %alloca dbg.declare(ptr %alloca, !SomeVar, !DIExpression(DW_OP_deref)) ``` Here, the alloca is *not* the address of the variable. A store to the alloca is *not* a store to the variable. As such, querying whether `%val` has the same size as `!SomeVar` is meaningless. This patch addresses the issue by: 1. Allowing the conversion when the expression is _only_ a `DW_OP_deref` without any other expressions (see code comment). 2. Checking that the expression does not start with a `DW_OP_deref` before applying the logic that checks whether the value being stored and the variable have the same length. Differential Revision: https://reviews.llvm.org/D142160
Diffstat (limited to 'llvm/lib/Object/Archive.cpp')
0 files changed, 0 insertions, 0 deletions