|  | // RUN: %clang_cc1 -triple mips64el-unknown-linux -O3 -target-abi n64 -o - -emit-llvm %s | FileCheck %s | 
|  |  | 
|  | class B0 { | 
|  | double d; | 
|  | }; | 
|  |  | 
|  | class D0 : public B0 { | 
|  | float f; | 
|  | }; | 
|  |  | 
|  | class B1 { | 
|  | }; | 
|  |  | 
|  | class D1 : public B1 { | 
|  | double d; | 
|  | float f; | 
|  | }; | 
|  |  | 
|  | class D2 : public B0 { | 
|  | double d2; | 
|  | }; | 
|  |  | 
|  | extern D0 gd0; | 
|  | extern D1 gd1; | 
|  | extern D2 gd2; | 
|  |  | 
|  | // CHECK: define{{.*}} inreg { i64, i64 } @_Z4foo1v() | 
|  | D0 foo1(void) { | 
|  | return gd0; | 
|  | } | 
|  |  | 
|  | // CHECK: define{{.*}} inreg { double, float } @_Z4foo2v() | 
|  | D1 foo2(void) { | 
|  | return gd1; | 
|  | } | 
|  |  | 
|  | // CHECK-LABEL: define{{.*}} void @_Z4foo32D2(i64 inreg %a0.coerce0, double inreg %a0.coerce1) | 
|  | void foo3(D2 a0) { | 
|  | gd2 = a0; | 
|  | } | 
|  |  | 
|  | // CHECK-LABEL: define{{.*}} void @_Z4foo42D0(i64 inreg %a0.coerce0, i64 inreg %a0.coerce1) | 
|  | void foo4(D0 a0) { | 
|  | gd0 = a0; | 
|  | } | 
|  |  |