x86_64-arguments.cpp revision 67d438d39a1cc37c372a2684dc354f58d0169bb1
1// RUN: %clang_cc1 -triple x86_64-unknown-unknown -emit-llvm -o - %s | FileCheck %s 2 3// CHECK: [[i64_i64_ty:%.*]] = type { i64, i64 } 4// CHECK: [[i64_double_ty:%.*]] = type { i64, double } 5 6// Basic base class test. 7struct f0_s0 { unsigned a; }; 8struct f0_s1 : public f0_s0 { void *b; }; 9// CHECK: define void @_Z2f05f0_s1([[i64_i64_ty]]) 10void f0(f0_s1 a0) { } 11 12// Check with two eight-bytes in base class. 13struct f1_s0 { unsigned a; unsigned b; float c; }; 14struct f1_s1 : public f1_s0 { float d;}; 15// CHECK: define void @_Z2f15f1_s1([[i64_double_ty]]) 16void f1(f1_s1 a0) { } 17 18// Check with two eight-bytes in base class and merge. 19struct f2_s0 { unsigned a; unsigned b; float c; }; 20struct f2_s1 : public f2_s0 { char d;}; 21// CHECK: define void @_Z2f25f2_s1([[i64_i64_ty]]) 22void f2(f2_s1 a0) { } 23 24// PR5831 25struct s3_0 {}; 26struct s3_1 { struct s3_0 a; long b; }; 27void f3(struct s3_1 x) {} 28 29// CHECK: define i64 @_Z4f4_0M2s4i(i64) 30// CHECK: define [[i64_i64_ty]] @_Z4f4_1M2s4FivE([[i64_i64_ty]]) 31struct s4 {}; 32typedef int s4::* s4_mdp; 33typedef int (s4::*s4_mfp)(); 34s4_mdp f4_0(s4_mdp a) { return a; } 35s4_mfp f4_1(s4_mfp a) { return a; } 36