1 // RUN: %clang_cc1 -triple le32-unknown-nacl %s -emit-llvm -o - | FileCheck %s 2 3 // Basic argument/attribute tests for le32/PNaCl 4 5 // CHECK-LABEL: define void @f0(i32 %i, i32 %j, double %k) 6 void f0(int i, long j, double k) {} 7 8 typedef struct { 9 int aa; 10 int bb; 11 } s1; 12 // Structs should be passed byval and not split up 13 // CHECK-LABEL: define void @f1(%struct.s1* byval %i) 14 void f1(s1 i) {} 15 16 typedef struct { 17 int cc; 18 } s2; 19 // Structs should be returned sret and not simplified by the frontend 20 // CHECK-LABEL: define void @f2(%struct.s2* noalias sret %agg.result) 21 s2 f2() { 22 s2 foo; 23 return foo; 24 } 25 26 // CHECK-LABEL: define void @f3(i64 %i) 27 void f3(long long i) {} 28 29 // i8/i16 should be signext, i32 and higher should not 30 // CHECK-LABEL: define void @f4(i8 signext %a, i16 signext %b) 31 void f4(char a, short b) {} 32 33 // CHECK-LABEL: define void @f5(i8 zeroext %a, i16 zeroext %b) 34 void f5(unsigned char a, unsigned short b) {} 35 36 37 enum my_enum { 38 ENUM1, 39 ENUM2, 40 ENUM3, 41 }; 42 // Enums should be treated as the underlying i32 43 // CHECK-LABEL: define void @f6(i32 %a) 44 void f6(enum my_enum a) {} 45 46 union simple_union { 47 int a; 48 char b; 49 }; 50 // Unions should be passed as byval structs 51 // CHECK-LABEL: define void @f7(%union.simple_union* byval %s) 52 void f7(union simple_union s) {} 53 54 typedef struct { 55 int b4 : 4; 56 int b3 : 3; 57 int b8 : 8; 58 } bitfield1; 59 // Bitfields should be passed as byval structs 60 // CHECK-LABEL: define void @f8(%struct.bitfield1* byval %bf1) 61 void f8(bitfield1 bf1) {} 62