xref: /llvm-project/cross-project-tests/debuginfo-tests/dexter-tests/memvars/struct-dse.c (revision a8837b49c1c1650357d7d8f2957c903b3a5ab039)
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