15d058e7f64d51f195128cdb13ef0d50df3161218Michael J. Spencer// This verifies that structs returned from functions by value are passed 25d058e7f64d51f195128cdb13ef0d50df3161218Michael J. Spencer// correctly according to their attributes and the ABI. 35d058e7f64d51f195128cdb13ef0d50df3161218Michael J. Spencer// SEE: PR3835 45d058e7f64d51f195128cdb13ef0d50df3161218Michael J. Spencer 55d058e7f64d51f195128cdb13ef0d50df3161218Michael J. Spencer// RUN: %clang_cc1 -triple i386-unknown-unknown -emit-llvm %s -o - | FileCheck %s 60ac86f0821a2ba7ae09793fee4451bef99e9b2f3Daniel Dunbar 70ac86f0821a2ba7ae09793fee4451bef99e9b2f3Daniel Dunbartypedef int T0; 80ac86f0821a2ba7ae09793fee4451bef99e9b2f3Daniel Dunbartypedef struct { int a[16]; } T1; 90ac86f0821a2ba7ae09793fee4451bef99e9b2f3Daniel Dunbar 100ac86f0821a2ba7ae09793fee4451bef99e9b2f3Daniel DunbarT0 __attribute__((const)) f0(void); 110ac86f0821a2ba7ae09793fee4451bef99e9b2f3Daniel DunbarT0 __attribute__((pure)) f1(void); 120ac86f0821a2ba7ae09793fee4451bef99e9b2f3Daniel DunbarT1 __attribute__((const)) f2(void); 130ac86f0821a2ba7ae09793fee4451bef99e9b2f3Daniel DunbarT1 __attribute__((pure)) f3(void); 140ac86f0821a2ba7ae09793fee4451bef99e9b2f3Daniel Dunbarvoid __attribute__((const)) f4(T1 a); 150ac86f0821a2ba7ae09793fee4451bef99e9b2f3Daniel Dunbarvoid __attribute__((pure)) f5(T1 a); 160ac86f0821a2ba7ae09793fee4451bef99e9b2f3Daniel Dunbar 170ac86f0821a2ba7ae09793fee4451bef99e9b2f3Daniel Dunbarvoid *ps[] = { f0, f1, f2, f3, f4, f5 }; 185d058e7f64d51f195128cdb13ef0d50df3161218Michael J. Spencer 19c3af6799d4c8ec4b338236e4361c0795e9af890aBill Wendling// CHECK: declare i32 @f0() [[RN:#[0-9]+]] 20c3af6799d4c8ec4b338236e4361c0795e9af890aBill Wendling// CHECK: declare i32 @f1() [[RO:#[0-9]+]] 215d058e7f64d51f195128cdb13ef0d50df3161218Michael J. Spencer// CHECK: declare void @f2({{.*}} sret) 225d058e7f64d51f195128cdb13ef0d50df3161218Michael J. Spencer// CHECK: declare void @f3({{.*}} sret) 23c1ea4b96adca4767991bb0a7b21052cef4db059cBill Wendling// CHECK: declare void @f4({{.*}} byval align 4) 24c1ea4b96adca4767991bb0a7b21052cef4db059cBill Wendling// CHECK: declare void @f5({{.*}} byval align 4) 25f7a9da053f5bd6c18450c1796d953b42c3b7ad3aBill Wendling 26c3af6799d4c8ec4b338236e4361c0795e9af890aBill Wendling// CHECK: attributes [[RN]] = { nounwind readnone{{.*}} } 27c3af6799d4c8ec4b338236e4361c0795e9af890aBill Wendling// CHECK: attributes [[RO]] = { nounwind readonly{{.*}} } 28