38 lines
		
	
	
		
			883 B
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			38 lines
		
	
	
		
			883 B
		
	
	
	
		
			C
		
	
	
	
// RUN: %clang_cc1 -triple armebv7-arm-none-eabi -emit-llvm -w -o - %s | FileCheck %s
 | 
						|
 | 
						|
// this tests for AAPCS section 5.4:
 | 
						|
// A Composite Type not larger than 4 bytes is returned in r0.
 | 
						|
// The format is as if the result had been stored in memory at a
 | 
						|
// word-aligned address and then loaded into r0 with an LDR instruction
 | 
						|
 | 
						|
extern union Us { short s; } us;
 | 
						|
union Us callee_us() { return us; }
 | 
						|
// CHECK-LABEL: callee_us()
 | 
						|
// CHECK: zext i16
 | 
						|
// CHECK: shl 
 | 
						|
// CHECK: ret i32
 | 
						|
 | 
						|
void caller_us() {
 | 
						|
  us = callee_us();
 | 
						|
// CHECK-LABEL: caller_us()
 | 
						|
// CHECK: call i32
 | 
						|
// CHECK: lshr i32
 | 
						|
// CHECK: trunc i32
 | 
						|
}
 | 
						|
 | 
						|
extern struct Ss { short s; } ss;
 | 
						|
struct Ss callee_ss() { return ss; }
 | 
						|
// CHECK-LABEL: callee_ss()
 | 
						|
// CHECK: zext i16
 | 
						|
// CHECK: shl 
 | 
						|
// CHECK: ret i32
 | 
						|
 | 
						|
void caller_ss() {
 | 
						|
  ss = callee_ss();
 | 
						|
// CHECK-LABEL: caller_ss()
 | 
						|
// CHECK: call i32
 | 
						|
// CHECK: lshr i32
 | 
						|
// CHECK: trunc i32
 | 
						|
}
 | 
						|
 |