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