summaryrefslogtreecommitdiffstats
path: root/debuginfo-tests/dexter-tests/realigned-frame.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'debuginfo-tests/dexter-tests/realigned-frame.cpp')
-rw-r--r--debuginfo-tests/dexter-tests/realigned-frame.cpp39
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'
+ }
+ }
+]})
+*/
OpenPOWER on IntegriCloud