blob: 3ff54d40cb1887e2e1410f4e9de95e0956a0ba3f [file] [log] [blame]
Ivan Krasinbba43ef2011-08-24 21:22:25 +00001// RUN: %clang -ccc-host-triple le32-unknown-nacl -ccc-echo %s -emit-llvm -c 2>&1 | FileCheck %s -check-prefix=ECHO
2// RUN: %clang -ccc-host-triple le32-unknown-nacl %s -emit-llvm -S -c -o - | FileCheck %s
Ivan Krasinef05abd2011-08-24 20:22:22 +00003
Ivan Krasinbba43ef2011-08-24 21:22:25 +00004// ECHO: clang{{.*}} -cc1 {{.*}}le32-unknown-nacl.c
Ivan Krasinef05abd2011-08-24 20:22:22 +00005
6// Check platform defines
7#include <stddef.h>
8
9extern "C" {
10
11#ifdef __native_client__
12void __native_client__defined() {
13 // CHECK: __native_client__defined
14}
15#endif
16
17#ifdef __le32__
18void __le32__defined() {
19 // CHECK: __le32__defined
20}
21#endif
22
23#ifdef __pnacl__
24void __pnacl__defined() {
25 // CHECK: __pnacl__defined
26}
27#endif
28
Ivan Krasin089ee112011-08-25 23:49:20 +000029#ifdef unix
30void unixdefined() {
31 // CHECK: unixdefined
32}
33#endif
34
35#ifdef __ELF__
36void __ELF__defined() {
37 // CHECK: __ELF__defined
38}
39#endif
40
41#ifdef _GNU_SOURCE
42void _GNU_SOURCEdefined() {
43 // CHECK: _GNU_SOURCEdefined
44}
45#endif
46
47
Ivan Krasinef05abd2011-08-24 20:22:22 +000048// Check types
49
50// CHECK: signext i8 @check_char()
51char check_char() { return 0; }
52
53// CHECK: signext i16 @check_short()
54short check_short() { return 0; }
55
56// CHECK: i32 @check_int()
57int check_int() { return 0; }
58
59// CHECK: i32 @check_long()
60long check_long() { return 0; }
61
62// CHECK: i64 @check_longlong()
63long long check_longlong() { return 0; }
64
65// CHECK: zeroext i8 @check_uchar()
66unsigned char check_uchar() { return 0; }
67
68// CHECK: zeroext i16 @check_ushort()
69unsigned short check_ushort() { return 0; }
70
71// CHECK: i32 @check_uint()
72unsigned int check_uint() { return 0; }
73
74// CHECK: i32 @check_ulong()
75unsigned long check_ulong() { return 0; }
76
77// CHECK: i64 @check_ulonglong()
78unsigned long long check_ulonglong() { return 0; }
79
80// CHECK: i32 @check_size_t()
81size_t check_size_t() { return 0; }
82
83// CHECK: float @check_float()
84float check_float() { return 0; }
85
86// CHECK: double @check_double()
87double check_double() { return 0; }
88
Ivan Krasinbba43ef2011-08-24 21:22:25 +000089// CHECK: double @check_longdouble()
90long double check_longdouble() { return 0; }
91
Ivan Krasinef05abd2011-08-24 20:22:22 +000092}
93
Ivan Krasinbba43ef2011-08-24 21:22:25 +000094#include <stdarg.h>
Ivan Krasinef05abd2011-08-24 20:22:22 +000095
96template<int> void Switch();
97template<> void Switch<4>();
98template<> void Switch<8>();
Ivan Krasinbba43ef2011-08-24 21:22:25 +000099template<> void Switch<16>();
Ivan Krasinef05abd2011-08-24 20:22:22 +0000100
101void check_pointer_size() {
102 // CHECK: SwitchILi4
103 Switch<sizeof(void*)>();
104
105 // CHECK: SwitchILi8
106 Switch<sizeof(long long)>();
Ivan Krasinbba43ef2011-08-24 21:22:25 +0000107
108 // CHECK: SwitchILi16
109 Switch<sizeof(va_list)>();
Ivan Krasinef05abd2011-08-24 20:22:22 +0000110}