// 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='s1', to_line='s4') // DexExpectWatchValue('*pa', 5, on_line='s2') // DexExpectWatchValue('*pb', 5, on_line='s3')