Home | History | Annotate | Download | only in llvm-c
      1 /*===-- include/llvm-c/DataTypes.h - Define fixed size types ------*- C -*-===*\
      2 |*                                                                            *|
      3 |*                     The LLVM Compiler Infrastructure                       *|
      4 |*                                                                            *|
      5 |* This file is distributed under the University of Illinois Open Source      *|
      6 |* License. See LICENSE.TXT for details.                                      *|
      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 #ifdef __cplusplus
     28 #include <cmath>
     29 #else
     30 #include <math.h>
     31 #endif
     32 
     33 #include <inttypes.h>
     34 #include <stdint.h>
     35 
     36 #ifndef _MSC_VER
     37 
     38 #if !defined(UINT32_MAX)
     39 # error "The standard header <cstdint> is not C++11 compliant. Must #define "\
     40         "__STDC_LIMIT_MACROS before #including llvm-c/DataTypes.h"
     41 #endif
     42 
     43 #if !defined(UINT32_C)
     44 # error "The standard header <cstdint> is not C++11 compliant. Must #define "\
     45         "__STDC_CONSTANT_MACROS before #including llvm-c/DataTypes.h"
     46 #endif
     47 
     48 /* Note that <inttypes.h> includes <stdint.h>, if this is a C99 system. */
     49 #include <sys/types.h>
     50 
     51 #ifdef _AIX
     52 // GCC is strict about defining large constants: they must have LL modifier.
     53 #undef INT64_MAX
     54 #undef INT64_MIN
     55 #endif
     56 
     57 #else /* _MSC_VER */
     58 #ifdef __cplusplus
     59 #include <cstddef>
     60 #include <cstdlib>
     61 #else
     62 #include <stddef.h>
     63 #include <stdlib.h>
     64 #endif
     65 #include <sys/types.h>
     66 
     67 #if defined(_WIN64)
     68 typedef signed __int64 ssize_t;
     69 #else
     70 typedef signed int ssize_t;
     71 #endif /* _WIN64 */
     72 
     73 #endif /* _MSC_VER */
     74 
     75 /* Set defaults for constants which we cannot find. */
     76 #if !defined(INT64_MAX)
     77 # define INT64_MAX 9223372036854775807LL
     78 #endif
     79 #if !defined(INT64_MIN)
     80 # define INT64_MIN ((-INT64_MAX)-1)
     81 #endif
     82 #if !defined(UINT64_MAX)
     83 # define UINT64_MAX 0xffffffffffffffffULL
     84 #endif
     85 
     86 #ifndef HUGE_VALF
     87 #define HUGE_VALF (float)HUGE_VAL
     88 #endif
     89 
     90 #endif /* LLVM_C_DATATYPES_H */
     91