101 lines · c
1// REQUIRES: powerpc-registered-target2// RUN: %clang_cc1 -triple powerpc-unknown-freebsd \3// RUN: -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK-SVR44// RUN: %clang_cc1 -triple powerpcle-unknown-freebsd \5// RUN: -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK-SVR46// RUN: %clang_cc1 -triple powerpc-unknown-aix \7// RUN: -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK-AIX8// RUN: %clang_cc1 -triple powerpc64-unknown-aix \9// RUN: -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK-AIX10// RUN: %clang_cc1 -triple powerpc-unknown-linux \11// RUN: -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK-AIX12// RUN: %clang_cc1 -triple powerpc-unknown-linux -maix-struct-return \13// RUN: -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK-AIX14// RUN: %clang_cc1 -triple powerpc-unknown-linux -msvr4-struct-return \15// RUN: -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK-SVR416// RUN: %clang_cc1 -triple powerpcle-unknown-linux \17// RUN: -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK-AIX18// RUN: %clang_cc1 -triple powerpcle-unknown-linux -maix-struct-return \19// RUN: -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK-AIX20// RUN: %clang_cc1 -triple powerpcle-unknown-linux -msvr4-struct-return \21// RUN: -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK-SVR422// RUN: %clang_cc1 -triple powerpc-unknown-netbsd \23// RUN: -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK-SVR424// RUN: %clang_cc1 -triple powerpc-unknown-openbsd \25// RUN: -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK-SVR426// RUN: %clang_cc1 -triple powerpc-unknown-openbsd -maix-struct-return \27// RUN: -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK-AIX28// RUN: %clang_cc1 -triple powerpc-unknown-openbsd -msvr4-struct-return \29// RUN: -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK-SVR430 31typedef struct {32} Zero;33typedef struct {34 char c;35} One;36typedef struct {37 short s;38} Two;39typedef struct {40 char c[3];41} Three;42typedef struct {43 float f;44} Four; // svr4 to return i32, not float45typedef struct {46 char c[5];47} Five;48typedef struct {49 short s[3];50} Six;51typedef struct {52 char c[7];53} Seven;54typedef struct {55 int i;56 char c;57} Eight; // padded for alignment58typedef struct {59 char c[9];60} Nine;61 62// CHECK-AIX-LABEL: define{{.*}} void @ret0(ptr dead_on_unwind noalias writable sret(%struct.Zero) {{[^,]*}})63// CHECK-SVR4-LABEL: define{{.*}} void @ret0()64Zero ret0(void) { return (Zero){}; }65 66// CHECK-AIX-LABEL: define{{.*}} void @ret1(ptr dead_on_unwind noalias writable sret(%struct.One) {{[^,]*}})67// CHECK-SVR4-LABEL: define{{.*}} i8 @ret1()68One ret1(void) { return (One){'a'}; }69 70// CHECK-AIX-LABEL: define{{.*}} void @ret2(ptr dead_on_unwind noalias writable sret(%struct.Two) {{[^,]*}})71// CHECK-SVR4-LABEL: define{{.*}} i16 @ret2()72Two ret2(void) { return (Two){123}; }73 74// CHECK-AIX-LABEL: define{{.*}} void @ret3(ptr dead_on_unwind noalias writable sret(%struct.Three) {{[^,]*}})75// CHECK-SVR4-LABEL: define{{.*}} i24 @ret3()76Three ret3(void) { return (Three){"abc"}; }77 78// CHECK-AIX-LABEL: define{{.*}} void @ret4(ptr dead_on_unwind noalias writable sret(%struct.Four) {{[^,]*}})79// CHECK-SVR4-LABEL: define{{.*}} i32 @ret4()80Four ret4(void) { return (Four){0.4}; }81 82// CHECK-AIX-LABEL: define{{.*}} void @ret5(ptr dead_on_unwind noalias writable sret(%struct.Five) {{[^,]*}})83// CHECK-SVR4-LABEL: define{{.*}} i40 @ret5()84Five ret5(void) { return (Five){"abcde"}; }85 86// CHECK-AIX-LABEL: define{{.*}} void @ret6(ptr dead_on_unwind noalias writable sret(%struct.Six) {{[^,]*}})87// CHECK-SVR4-LABEL: define{{.*}} i48 @ret6()88Six ret6(void) { return (Six){12, 34, 56}; }89 90// CHECK-AIX-LABEL: define{{.*}} void @ret7(ptr dead_on_unwind noalias writable sret(%struct.Seven) {{[^,]*}})91// CHECK-SVR4-LABEL: define{{.*}} i56 @ret7()92Seven ret7(void) { return (Seven){"abcdefg"}; }93 94// CHECK-AIX-LABEL: define{{.*}} void @ret8(ptr dead_on_unwind noalias writable sret(%struct.Eight) {{[^,]*}})95// CHECK-SVR4-LABEL: define{{.*}} i64 @ret8()96Eight ret8(void) { return (Eight){123, 'a'}; }97 98// CHECK-AIX-LABEL: define{{.*}} void @ret9(ptr dead_on_unwind noalias writable sret(%struct.Nine) {{[^,]*}})99// CHECK-SVR4-LABEL: define{{.*}} void @ret9(ptr dead_on_unwind noalias writable sret(%struct.Nine) {{[^,]*}})100Nine ret9(void) { return (Nine){"abcdefghi"}; }101