11364750dSJames Henderson // XFAIL:*
21364750dSJames Henderson //// Currently, LowerDbgDeclare doesn't lower dbg.declares pointing at allocas
31364750dSJames Henderson //// for structs.
41364750dSJames Henderson
51364750dSJames Henderson // REQUIRES: lldb
61364750dSJames Henderson // UNSUPPORTED: system-windows
745a40c16SStephen Tozer // RUN: %clang -std=gnu11 -O2 -glldb %s -o %t
845a40c16SStephen Tozer // RUN: %dexter --fail-lt 1.0 -w --debugger lldb --binary %t -- %s
91364750dSJames Henderson //
101364750dSJames Henderson //// Check debug-info for the escaped struct variable num is reasonable.
111364750dSJames Henderson
121364750dSJames Henderson #include <stdio.h>
13*a8837b49SFelipe de Azevedo Piovezan struct Nums {
14*a8837b49SFelipe de Azevedo Piovezan int a, b, c, d, e, f, g, h, i, j;
15*a8837b49SFelipe de Azevedo Piovezan };
161364750dSJames Henderson struct Nums glob;
171364750dSJames Henderson __attribute__((__noinline__))
esc(struct Nums * nums)181364750dSJames Henderson void esc(struct Nums* nums) {
191364750dSJames Henderson glob = *nums;
201364750dSJames Henderson }
211364750dSJames Henderson
221364750dSJames Henderson __attribute__((__noinline__))
main()231364750dSJames Henderson int main() {
241364750dSJames Henderson struct Nums nums = { .c=1 }; //// Dead store.
251364750dSJames Henderson printf("s1 nums.c: %d\n", nums.c); // DexLabel('s1')
261364750dSJames Henderson
271364750dSJames Henderson nums.c = 2; //// Killing store.
281364750dSJames Henderson printf("s2 nums.c: %d\n", nums.c); // DexLabel('s2')
291364750dSJames Henderson
301364750dSJames Henderson esc(&nums); //// Force nums to live on the stack.
311364750dSJames Henderson return 0; // DexLabel('s3')
321364750dSJames Henderson }
331364750dSJames Henderson
341364750dSJames Henderson // DexExpectWatchValue('nums.c', '1', on_line=ref('s1'))
351364750dSJames Henderson // DexExpectWatchValue('nums.c', '2', from_line=ref('s2'), to_line=ref('s3'))
36