40 lines
		
	
	
		
			933 B
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			40 lines
		
	
	
		
			933 B
		
	
	
	
		
			C++
		
	
	
	
// 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'
 | 
						|
     }
 | 
						|
    }
 | 
						|
]})
 | 
						|
*/
 |