1/* $NetBSD: inittyp.c,v 1.10 2008/09/26 22:52:24 matt Exp $ */ 2 3/* 4 * Copyright (c) 1994, 1995 Jochen Pohl 5 * All Rights Reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 1. Redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 3. All advertising materials mentioning features or use of this software 16 * must display the following acknowledgement: 17 * This product includes software developed by Jochen Pohl for 18 * The NetBSD Project. 19 * 4. The name of the author may not be used to endorse or promote products 20 * derived from this software without specific prior written permission. 21 * 22 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 23 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 24 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 25 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 26 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 27 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 28 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 29 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 30 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 31 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 32 */ 33 34#if HAVE_NBTOOL_CONFIG_H 35#include "nbtool_config.h" 36#endif 37 38#include <sys/cdefs.h> 39#if defined(__RCSID) && !defined(lint) 40__RCSID("$NetBSD: inittyp.c,v 1.10 2008/09/26 22:52:24 matt Exp $"); 41#endif 42 43#include <limits.h> 44#include <stdlib.h> 45 46#include "lint.h" 47 48/* various type information */ 49ttab_t ttab[NTSPEC]; 50 51#if INTPTR_IS_LONG 52#define INT_RSIZE 3 53#else 54#define INT_RSIZE 4 55#endif 56 57void 58inittyp(void) 59{ 60 size_t i; 61 static const struct { 62 tspec_t it_tspec; 63 ttab_t it_ttab; 64 } ittab[NTSPEC] = { 65 { SIGNED, { 0, 0, 66 SIGNED, UNSIGN, 67 0, 0, 0, 0, 0, 0, "signed" } }, 68 { UNSIGN, { 0, 0, 69 SIGNED, UNSIGN, 70 0, 0, 0, 0, 0, 0, "unsigned" } }, 71 { BOOL, { CHAR_SIZE, 1, 72 BOOL, BOOL, 73 1, 1, 0, 1, 1, 0, "_Bool" } }, 74 { CHAR, { CHAR_SIZE, CHAR_BIT, 75 SCHAR, UCHAR, 76 1, 0, 0, 1, 1, 0, "char" } }, 77 { SCHAR, { CHAR_SIZE, CHAR_BIT, 78 SCHAR, UCHAR, 79 1, 0, 0, 1, 1, 0, "signed char" } }, 80 { UCHAR, { CHAR_SIZE, CHAR_BIT, 81 SCHAR, UCHAR, 82 1, 1, 0, 1, 1, 0, "unsigned char" } }, 83 { SHORT, { SHORT_SIZE, 2 * CHAR_BIT, 84 SHORT, USHORT, 85 1, 0, 0, 1, 1, 0, "short" } }, 86 { USHORT, { SHORT_SIZE, 2 * CHAR_BIT, 87 SHORT, USHORT, 88 1, 1, 0, 1, 1, 0, "unsigned short" } }, 89 { INT, { INT_SIZE, INT_RSIZE * CHAR_BIT, 90 INT, UINT, 91 1, 0, 0, 1, 1, 0, "int" } }, 92 { UINT, { INT_SIZE, INT_RSIZE * CHAR_BIT, 93 INT, UINT, 94 1, 1, 0, 1, 1, 0, "unsigned int" } }, 95 { LONG, { LONG_SIZE, 4 * CHAR_BIT, 96 LONG, ULONG, 97 1, 0, 0, 1, 1, 0, "long" } }, 98 { ULONG, { LONG_SIZE, 4 * CHAR_BIT, 99 LONG, ULONG, 100 1, 1, 0, 1, 1, 0, "unsigned long" } }, 101 { QUAD, { QUAD_SIZE, 8 * CHAR_BIT, 102 QUAD, UQUAD, 103 1, 0, 0, 1, 1, 0, "long long" } }, 104 { UQUAD, { QUAD_SIZE, 8 * CHAR_BIT, 105 QUAD, UQUAD, 106 1, 1, 0, 1, 1, 0, "unsigned long long" } }, 107 { FLOAT, { FLOAT_SIZE, 4 * CHAR_BIT, 108 FLOAT, FLOAT, 109 0, 0, 1, 1, 1, 0, "float" } }, 110 { DOUBLE, { DOUBLE_SIZE, 8 * CHAR_BIT, 111 DOUBLE, DOUBLE, 112 0, 0, 1, 1, 1, 0, "double" } }, 113 { LDOUBLE, { LDOUBLE_SIZE, 10 * CHAR_BIT, 114 LDOUBLE, LDOUBLE, 115 0, 0, 1, 1, 1, 0, "long double" } }, 116 { FCOMPLEX, { FLOAT_SIZE * 2, 4 * CHAR_BIT * 2, 117 FCOMPLEX, FCOMPLEX, 118 0, 0, 1, 1, 1, 1, "float _Complex" } }, 119 { DCOMPLEX, { DOUBLE_SIZE * 2, 8 * CHAR_BIT * 2, 120 DCOMPLEX, DCOMPLEX, 121 0, 0, 1, 1, 1, 1, "double _Complex" } }, 122 { LCOMPLEX, { LDOUBLE_SIZE * 2, 8 * CHAR_BIT * 2, 123 LCOMPLEX, LCOMPLEX, 124 0, 0, 1, 1, 1, 1, "long double _Complex" } }, 125 { VOID, { -1, -1, 126 VOID, VOID, 127 0, 0, 0, 0, 0, 0, "void" } }, 128 { STRUCT, { -1, -1, 129 STRUCT, STRUCT, 130 0, 0, 0, 0, 0, 0, "struct" } }, 131 { UNION, { -1, -1, 132 UNION, UNION, 133 0, 0, 0, 0, 0, 0, "union" } }, 134 { ENUM, { ENUM_SIZE, 3 * CHAR_BIT, 135 ENUM, ENUM, 136 1, 0, 0, 1, 1, 0, "enum" } }, 137 { PTR, { PTR_SIZE, 4 * CHAR_BIT, 138 PTR, PTR, 139 0, 1, 0, 0, 1, 0, "pointer" } }, 140 { ARRAY, { -1, -1, 141 ARRAY, ARRAY, 142 0, 0, 0, 0, 0, 0, "array" } }, 143 { FUNC, { -1, -1, 144 FUNC, FUNC, 145 0, 0, 0, 0, 0, 0, "function" } }, 146 }; 147 148 for (i = 0; i < sizeof (ittab) / sizeof (ittab[0]); i++) 149 STRUCT_ASSIGN(ttab[ittab[i].it_tspec], ittab[i].it_ttab); 150 if (!pflag) { 151 for (i = 0; i < NTSPEC; i++) 152 ttab[i].tt_psz = ttab[i].tt_sz; 153 } 154} 155