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