This is an initial prototype of how we can run debugger integration tests on Windows. cdb and windbg share a command language and debugger engine. Visual Studio has its own, but we should at least be able to use cdb as the basis for optimized debug info integration tests. There's a lot of work to do here still. For example: - Make fewer assumptions about the SDK location - Don't assume x64 (important, I need x86 testing) - More environment isolation, have lit setup vcvars instead of passing LIB and INCLUDE down. - Write a .py file to replace the grep+sed RUN line But, this seemed like a good enough concept to commit as is, since it's useful to me already. Reviewers: aprantl, zturner Differential Revision: https://reviews.llvm.org/D54187 llvm-svn: 361889
35 lines
852 B
C++
35 lines
852 B
C++
// RUN: %clang_cl %s -o %t.exe -fuse-ld=lld -Z7
|
|
// RUN: grep DE[B]UGGER: %s | sed -e 's/.*DE[B]UGGER: //' > %t.script
|
|
// RUN: %cdb -cf %t.script %t.exe | FileCheck %s --check-prefixes=DEBUGGER,CHECK
|
|
|
|
// 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);
|
|
// DEBUGGER: g
|
|
// DEBUGGER: .frame 1
|
|
// DEBUGGER: dv
|
|
// CHECK: a = 0n1
|
|
// CHECK: b = 0n2
|
|
// CHECK: force_alignment = 0.41999{{.*}}
|
|
// DEBUGGER: q
|
|
x += (int)force_alignment;
|
|
return x;
|
|
}
|
|
void Foo::bar(int *a, int *b, double *c) {
|
|
__debugbreak();
|
|
*c += *a + *b;
|
|
}
|
|
int main() {
|
|
Foo o;
|
|
o.foo();
|
|
}
|