diff options
Diffstat (limited to 'debuginfo-tests/dexter-tests/realigned-frame.cpp')
-rw-r--r-- | debuginfo-tests/dexter-tests/realigned-frame.cpp | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/debuginfo-tests/dexter-tests/realigned-frame.cpp b/debuginfo-tests/dexter-tests/realigned-frame.cpp new file mode 100644 index 00000000000..3d3c086cd17 --- /dev/null +++ b/debuginfo-tests/dexter-tests/realigned-frame.cpp @@ -0,0 +1,39 @@ +// REQUIRES: system-windows +// +// RUN: %dexter --fail-lt 1.0 -w --builder 'clang-cl_vs2015' \ +// RUN: --debugger 'dbgeng' --cflags '/Z7 /Zi' --ldflags '/Z7 /Zi' -- %s + +// From https://llvm.org/pr38857, where we had issues with stack realignment. + +struct Foo { + int x = 42; + int __declspec(noinline) foo(); + void __declspec(noinline) bar(int *a, int *b, double *c); +}; +int Foo::foo() { + int a = 1; + int b = 2; + double __declspec(align(32)) force_alignment = 0.42; + bar(&a, &b, &force_alignment); // DexLabel('in_foo') + x += (int)force_alignment; + return x; +} +void Foo::bar(int *a, int *b, double *c) { + *c += *a + *b; // DexLabel('in_bar') +} +int main() { + Foo o; + o.foo(); +} +/* +DexExpectProgramState({'frames':[ + {'function': 'Foo::bar', 'location' : {'lineno' : 'in_bar'} }, + {'function': 'Foo::foo', + 'watches' : { + 'a' : '1', + 'b' : '2', + 'force_alignment' : '0.42' + } + } +]}) +*/ |