| // XFAIL:* |
| //// We don't yet support DW_OP_implicit_pointer in llvm. |
| |
| // REQUIRES: lldb |
| // UNSUPPORTED: system-windows |
| // RUN: %dexter --fail-lt 1.0 -w --debugger lldb \ |
| // RUN: --builder 'clang-c' --cflags "-O3 -glldb" -- %s |
| |
| //// Check that 'param' in 'fun' can be read throughout, and that 'pa' and 'pb' |
| //// can be dereferenced in the debugger even if we can't provide the pointer |
| //// value itself. |
| |
| int globa; |
| int globb; |
| |
| //// A no-inline, read-only function with internal linkage is a good candidate |
| //// for arg promotion. |
| __attribute__((__noinline__)) |
| static void use_promote(const int* pa) { |
| //// Promoted args would be a good candidate for an DW_OP_implicit_pointer. |
| globa = *pa; // DexLabel('s2') |
| } |
| |
| __attribute__((__always_inline__)) |
| static void use_inline(const int* pb) { |
| //// Inlined pointer to callee local would be a good candidate for an |
| //// DW_OP_implicit_pointer. |
| globb = *pb; // DexLabel('s3') |
| } |
| |
| __attribute__((__noinline__)) |
| int fun(int param) { |
| volatile int step = 0; // DexLabel('s1') |
| use_promote(¶m); |
| use_inline(¶m); |
| return step; // DexLabel('s4') |
| } |
| |
| int main() { |
| return fun(5); |
| } |
| |
| // DexExpectWatchValue('param', 5, from_line=ref('s1'), to_line=ref('s4')) |
| // DexExpectWatchValue('*pa', 5, on_line=ref('s2')) |
| // DexExpectWatchValue('*pb', 5, on_line=ref('s3')) |