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)
62typedef signed __int64 ssize_t;
63#else
64typedef 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