1 | /*===-- include/llvm-c/DataTypes.h - Define fixed size types ------*- C -*-===*\ |
2 | |* *| |
3 | |* Part of the LLVM Project, under the Apache License v2.0 with LLVM *| |
4 | |* Exceptions. *| |
5 | |* See https://llvm.org/LICENSE.txt for license information. *| |
6 | |* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception *| |
7 | |* *| |
8 | |*===----------------------------------------------------------------------===*| |
9 | |* *| |
10 | |* This file contains definitions to figure out the size of _HOST_ data types.*| |
11 | |* This file is important because different host OS's define different macros,*| |
12 | |* which makes portability tough. This file exports the following *| |
13 | |* definitions: *| |
14 | |* *| |
15 | |* [u]int(32|64)_t : typedefs for signed and unsigned 32/64 bit system types*| |
16 | |* [U]INT(8|16|32|64)_(MIN|MAX) : Constants for the min and max values. *| |
17 | |* *| |
18 | |* No library is required when using these functions. *| |
19 | |* *| |
20 | |*===----------------------------------------------------------------------===*/ |
21 | |
22 | /* Please leave this file C-compatible. */ |
23 | |
24 | #ifndef LLVM_C_DATATYPES_H |
25 | #define LLVM_C_DATATYPES_H |
26 | |
27 | #include <inttypes.h> |
28 | #include <stdint.h> |
29 | |
30 | #ifndef _MSC_VER |
31 | |
32 | #if !defined(UINT32_MAX) |
33 | # error "The standard header <cstdint> is not C++11 compliant. Must #define "\ |
34 | "__STDC_LIMIT_MACROS before #including llvm-c/DataTypes.h" |
35 | #endif |
36 | |
37 | #if !defined(UINT32_C) |
38 | # error "The standard header <cstdint> is not C++11 compliant. Must #define "\ |
39 | "__STDC_CONSTANT_MACROS before #including llvm-c/DataTypes.h" |
40 | #endif |
41 | |
42 | /* Note that <inttypes.h> includes <stdint.h>, if this is a C99 system. */ |
43 | #include <sys/types.h> |
44 | |
45 | #ifdef _AIX |
46 | // GCC is strict about defining large constants: they must have LL modifier. |
47 | #undef INT64_MAX |
48 | #undef INT64_MIN |
49 | #endif |
50 | |
51 | #else /* _MSC_VER */ |
52 | #ifdef __cplusplus |
53 | #include <cstddef> |
54 | #include <cstdlib> |
55 | #else |
56 | #include <stddef.h> |
57 | #include <stdlib.h> |
58 | #endif |
59 | #include <sys/types.h> |
60 | |
61 | #if defined(_WIN64) |
62 | typedef signed __int64 ssize_t; |
63 | #else |
64 | typedef signed int ssize_t; |
65 | #endif /* _WIN64 */ |
66 | |
67 | #endif /* _MSC_VER */ |
68 | |
69 | /* Set defaults for constants which we cannot find. */ |
70 | #if !defined(INT64_MAX) |
71 | # define INT64_MAX 9223372036854775807LL |
72 | #endif |
73 | #if !defined(INT64_MIN) |
74 | # define INT64_MIN ((-INT64_MAX)-1) |
75 | #endif |
76 | #if !defined(UINT64_MAX) |
77 | # define UINT64_MAX 0xffffffffffffffffULL |
78 | #endif |
79 | |
80 | #endif /* LLVM_C_DATATYPES_H */ |
81 | |