forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			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();
 | 
						|
}
 |