1*1364750dSJames Henderson // REQUIRES: system-windows
2*1364750dSJames Henderson //
3*1364750dSJames Henderson // RUN: %dexter --fail-lt 1.0 -w --builder 'clang-cl_vs2015' \
4*1364750dSJames Henderson // RUN: --debugger 'dbgeng' --cflags '/Z7 /Zi' --ldflags '/Z7 /Zi' -- %s
5*1364750dSJames Henderson
6*1364750dSJames Henderson // From https://llvm.org/pr38857, where we had issues with stack realignment.
7*1364750dSJames Henderson
8*1364750dSJames Henderson struct Foo {
9*1364750dSJames Henderson int x = 42;
10*1364750dSJames Henderson int __declspec(noinline) foo();
11*1364750dSJames Henderson void __declspec(noinline) bar(int *a, int *b, double *c);
12*1364750dSJames Henderson };
foo()13*1364750dSJames Henderson int Foo::foo() {
14*1364750dSJames Henderson int a = 1;
15*1364750dSJames Henderson int b = 2;
16*1364750dSJames Henderson double __declspec(align(32)) force_alignment = 0.42;
17*1364750dSJames Henderson bar(&a, &b, &force_alignment); // DexLabel('in_foo')
18*1364750dSJames Henderson x += (int)force_alignment;
19*1364750dSJames Henderson return x;
20*1364750dSJames Henderson }
bar(int * a,int * b,double * c)21*1364750dSJames Henderson void Foo::bar(int *a, int *b, double *c) {
22*1364750dSJames Henderson *c += *a + *b; // DexLabel('in_bar')
23*1364750dSJames Henderson }
main()24*1364750dSJames Henderson int main() {
25*1364750dSJames Henderson Foo o;
26*1364750dSJames Henderson o.foo();
27*1364750dSJames Henderson }
28*1364750dSJames Henderson /*
29*1364750dSJames Henderson DexExpectProgramState({'frames':[
30*1364750dSJames Henderson {'function': 'Foo::bar', 'location' : {'lineno' : ref('in_bar')} },
31*1364750dSJames Henderson {'function': 'Foo::foo',
32*1364750dSJames Henderson 'watches' : {
33*1364750dSJames Henderson 'a' : '1',
34*1364750dSJames Henderson 'b' : '2',
35*1364750dSJames Henderson 'force_alignment' : '0.42'
36*1364750dSJames Henderson }
37*1364750dSJames Henderson }
38*1364750dSJames Henderson ]})
39*1364750dSJames Henderson */
40