Module Name: src Committed By: rillig Date: Sun Jul 2 18:14:44 UTC 2023
Modified Files: src/tests/usr.bin/xlint/lint1: expr_fold.c msg_252.c src/usr.bin/xlint/lint1: ckbool.c debug.c decl.c emit1.c externs1.h func.c lex.c lint1.h tree.c Log Message: lint: rename 'quad' to 'signed int' or 'unsigned int' No functional change. To generate a diff of this commit: cvs rdiff -u -r1.8 -r1.9 src/tests/usr.bin/xlint/lint1/expr_fold.c cvs rdiff -u -r1.5 -r1.6 src/tests/usr.bin/xlint/lint1/msg_252.c cvs rdiff -u -r1.22 -r1.23 src/usr.bin/xlint/lint1/ckbool.c cvs rdiff -u -r1.44 -r1.45 src/usr.bin/xlint/lint1/debug.c cvs rdiff -u -r1.336 -r1.337 src/usr.bin/xlint/lint1/decl.c cvs rdiff -u -r1.70 -r1.71 src/usr.bin/xlint/lint1/emit1.c cvs rdiff -u -r1.186 -r1.187 src/usr.bin/xlint/lint1/externs1.h cvs rdiff -u -r1.162 -r1.163 src/usr.bin/xlint/lint1/func.c cvs rdiff -u -r1.165 -r1.166 src/usr.bin/xlint/lint1/lex.c cvs rdiff -u -r1.176 -r1.177 src/usr.bin/xlint/lint1/lint1.h cvs rdiff -u -r1.543 -r1.544 src/usr.bin/xlint/lint1/tree.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/tests/usr.bin/xlint/lint1/expr_fold.c diff -u src/tests/usr.bin/xlint/lint1/expr_fold.c:1.8 src/tests/usr.bin/xlint/lint1/expr_fold.c:1.9 --- src/tests/usr.bin/xlint/lint1/expr_fold.c:1.8 Tue Mar 28 14:44:34 2023 +++ src/tests/usr.bin/xlint/lint1/expr_fold.c Sun Jul 2 18:14:44 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: expr_fold.c,v 1.8 2023/03/28 14:44:34 rillig Exp $ */ +/* $NetBSD: expr_fold.c,v 1.9 2023/07/02 18:14:44 rillig Exp $ */ # 3 "expr_fold.c" /* @@ -291,7 +291,7 @@ struct ctassert5_struct { /* * Since Makefile.inc 1.21 from 2022-04-08 (which added -ftrapv) and before * tree.c 1.436 from 2022-04-20, lint crashed with an integer overflow when - * calculating '-(uint64_t)INT64_MIN' in val_t.v_quad. + * calculating '-(uint64_t)INT64_MIN' in val_t.u.integer. */ void unary_minus_overflow(unsigned long long val) Index: src/tests/usr.bin/xlint/lint1/msg_252.c diff -u src/tests/usr.bin/xlint/lint1/msg_252.c:1.5 src/tests/usr.bin/xlint/lint1/msg_252.c:1.6 --- src/tests/usr.bin/xlint/lint1/msg_252.c:1.5 Tue Mar 28 14:44:35 2023 +++ src/tests/usr.bin/xlint/lint1/msg_252.c Sun Jul 2 18:14:44 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: msg_252.c,v 1.5 2023/03/28 14:44:35 rillig Exp $ */ +/* $NetBSD: msg_252.c,v 1.6 2023/07/02 18:14:44 rillig Exp $ */ # 3 "msg_252.c" // Test for message: integer constant out of range [252] @@ -13,8 +13,8 @@ * This number is passed to convert_constant, which calls convert_integer, * which sign-extends the number to 'INT 0xffff_ffff_ffff_ffff'. This * converted number is passed to convert_constant_check_range, and at this - * point, v->v_quad != nv->v_quad, due to the sign extension. This triggers - * an additional warning 119. + * point, v->u.integer != nv->u.integer, due to the sign extension. This + * triggers an additional warning 119. * * On a 64-bit platform, lex_integer_constant stores the number as * 'ULONG 0xffff_ffff_ffff_ffff', which has the same representation as the Index: src/usr.bin/xlint/lint1/ckbool.c diff -u src/usr.bin/xlint/lint1/ckbool.c:1.22 src/usr.bin/xlint/lint1/ckbool.c:1.23 --- src/usr.bin/xlint/lint1/ckbool.c:1.22 Sat Jun 24 20:50:54 2023 +++ src/usr.bin/xlint/lint1/ckbool.c Sun Jul 2 18:14:44 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: ckbool.c,v 1.22 2023/06/24 20:50:54 rillig Exp $ */ +/* $NetBSD: ckbool.c,v 1.23 2023/07/02 18:14:44 rillig Exp $ */ /*- * Copyright (c) 2021 The NetBSD Foundation, Inc. @@ -36,7 +36,7 @@ #include <sys/cdefs.h> #if defined(__RCSID) -__RCSID("$NetBSD: ckbool.c,v 1.22 2023/06/24 20:50:54 rillig Exp $"); +__RCSID("$NetBSD: ckbool.c,v 1.23 2023/07/02 18:14:44 rillig Exp $"); #endif #include <string.h> @@ -79,7 +79,7 @@ is_symmetric_bool_or_other(op_t op) static bool is_int_constant_zero(const tnode_t *tn, tspec_t t) { - return t == INT && tn->tn_op == CON && tn->tn_val.v_quad == 0; + return t == INT && tn->tn_op == CON && tn->tn_val.u.integer == 0; } static bool Index: src/usr.bin/xlint/lint1/debug.c diff -u src/usr.bin/xlint/lint1/debug.c:1.44 src/usr.bin/xlint/lint1/debug.c:1.45 --- src/usr.bin/xlint/lint1/debug.c:1.44 Sun Jul 2 17:41:30 2023 +++ src/usr.bin/xlint/lint1/debug.c Sun Jul 2 18:14:44 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: debug.c,v 1.44 2023/07/02 17:41:30 rillig Exp $ */ +/* $NetBSD: debug.c,v 1.45 2023/07/02 18:14:44 rillig Exp $ */ /*- * Copyright (c) 2021 The NetBSD Foundation, Inc. @@ -35,7 +35,7 @@ #include <sys/cdefs.h> #if defined(__RCSID) -__RCSID("$NetBSD: debug.c,v 1.44 2023/07/02 17:41:30 rillig Exp $"); +__RCSID("$NetBSD: debug.c,v 1.45 2023/07/02 18:14:44 rillig Exp $"); #endif #include <stdlib.h> @@ -188,17 +188,17 @@ debug_node(const tnode_t *tn) // NOLINT( break; case CON: if (is_floating(tn->tn_type->t_tspec)) - debug_printf(", value %Lg", tn->tn_val.v_ldbl); + debug_printf(", value %Lg", tn->tn_val.u.floating); else if (is_uinteger(tn->tn_type->t_tspec)) debug_printf(", value %llu", - (unsigned long long)tn->tn_val.v_quad); + (unsigned long long)tn->tn_val.u.integer); else if (is_integer(tn->tn_type->t_tspec)) debug_printf(", value %lld", - (long long)tn->tn_val.v_quad); + (long long)tn->tn_val.u.integer); else { lint_assert(tn->tn_type->t_tspec == BOOL); debug_printf(", value %s", - tn->tn_val.v_quad != 0 ? "true" : "false"); + tn->tn_val.u.integer != 0 ? "true" : "false"); } if (tn->tn_val.v_unsigned_since_c90) debug_printf(", unsigned_since_c90"); Index: src/usr.bin/xlint/lint1/decl.c diff -u src/usr.bin/xlint/lint1/decl.c:1.336 src/usr.bin/xlint/lint1/decl.c:1.337 --- src/usr.bin/xlint/lint1/decl.c:1.336 Sun Jul 2 17:41:30 2023 +++ src/usr.bin/xlint/lint1/decl.c Sun Jul 2 18:14:44 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: decl.c,v 1.336 2023/07/02 17:41:30 rillig Exp $ */ +/* $NetBSD: decl.c,v 1.337 2023/07/02 18:14:44 rillig Exp $ */ /* * Copyright (c) 1996 Christopher G. Demetriou. All Rights Reserved. @@ -38,7 +38,7 @@ #include <sys/cdefs.h> #if defined(__RCSID) -__RCSID("$NetBSD: decl.c,v 1.336 2023/07/02 17:41:30 rillig Exp $"); +__RCSID("$NetBSD: decl.c,v 1.337 2023/07/02 18:14:44 rillig Exp $"); #endif #include <sys/param.h> @@ -294,7 +294,7 @@ dcs_add_type(type_t *tp) /* "long long" or "long ... long" */ t = QUAD; dcs->d_rank_mod = NO_TSPEC; - if (!quadflg) + if (!long_long_flag) /* %s does not support 'long long' */ c99ism(265, allow_c90 ? "C90" : "traditional C"); } @@ -3199,7 +3199,7 @@ to_int_constant(tnode_t *tn, bool requir val_t *v = integer_constant(tn, required); bool is_unsigned = is_uinteger(v->v_tspec); - int64_t val = v->v_quad; + int64_t val = v->u.integer; free(v); /* Index: src/usr.bin/xlint/lint1/emit1.c diff -u src/usr.bin/xlint/lint1/emit1.c:1.70 src/usr.bin/xlint/lint1/emit1.c:1.71 --- src/usr.bin/xlint/lint1/emit1.c:1.70 Thu Jun 29 10:31:33 2023 +++ src/usr.bin/xlint/lint1/emit1.c Sun Jul 2 18:14:44 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: emit1.c,v 1.70 2023/06/29 10:31:33 rillig Exp $ */ +/* $NetBSD: emit1.c,v 1.71 2023/07/02 18:14:44 rillig Exp $ */ /* * Copyright (c) 1996 Christopher G. Demetriou. All Rights Reserved. @@ -38,7 +38,7 @@ #include <sys/cdefs.h> #if defined(__RCSID) -__RCSID("$NetBSD: emit1.c,v 1.70 2023/06/29 10:31:33 rillig Exp $"); +__RCSID("$NetBSD: emit1.c,v 1.71 2023/07/02 18:14:44 rillig Exp $"); #endif #include "lint1.h" @@ -339,7 +339,6 @@ outcall(const tnode_t *tn, bool retval_u { tnode_t *args, *arg; int narg, n, i; - int64_t q; tspec_t t; /* reset buffer */ @@ -372,10 +371,11 @@ outcall(const tnode_t *tn, bool retval_u * XXX it would probably be better to * explicitly test the sign */ - if ((q = arg->tn_val.v_quad) == 0) { + int64_t si = arg->tn_val.u.integer; + if (si == 0) { /* zero constant */ outchar('z'); - } else if (!msb(q, t)) { + } else if (!msb(si, t)) { /* positive if cast to signed */ outchar('p'); } else { Index: src/usr.bin/xlint/lint1/externs1.h diff -u src/usr.bin/xlint/lint1/externs1.h:1.186 src/usr.bin/xlint/lint1/externs1.h:1.187 --- src/usr.bin/xlint/lint1/externs1.h:1.186 Sun Jul 2 10:20:45 2023 +++ src/usr.bin/xlint/lint1/externs1.h Sun Jul 2 18:14:44 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: externs1.h,v 1.186 2023/07/02 10:20:45 rillig Exp $ */ +/* $NetBSD: externs1.h,v 1.187 2023/07/02 18:14:44 rillig Exp $ */ /* * Copyright (c) 1994, 1995 Jochen Pohl @@ -301,7 +301,7 @@ extern bool llibflg; extern int lwarn; extern bool bitfieldtype_ok; extern bool plibflg; -extern bool quadflg; +extern bool long_long_flag; void begin_control_statement(control_statement_kind); void end_control_statement(control_statement_kind); Index: src/usr.bin/xlint/lint1/func.c diff -u src/usr.bin/xlint/lint1/func.c:1.162 src/usr.bin/xlint/lint1/func.c:1.163 --- src/usr.bin/xlint/lint1/func.c:1.162 Sun Jul 2 10:20:45 2023 +++ src/usr.bin/xlint/lint1/func.c Sun Jul 2 18:14:44 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: func.c,v 1.162 2023/07/02 10:20:45 rillig Exp $ */ +/* $NetBSD: func.c,v 1.163 2023/07/02 18:14:44 rillig Exp $ */ /* * Copyright (c) 1994, 1995 Jochen Pohl @@ -37,7 +37,7 @@ #include <sys/cdefs.h> #if defined(__RCSID) -__RCSID("$NetBSD: func.c,v 1.162 2023/07/02 10:20:45 rillig Exp $"); +__RCSID("$NetBSD: func.c,v 1.163 2023/07/02 18:14:44 rillig Exp $"); #endif #include <stdlib.h> @@ -148,7 +148,7 @@ bool bitfieldtype_ok; * Whether complaints about use of "long long" are suppressed in * the next statement or declaration. */ -bool quadflg; +bool long_long_flag; void begin_control_statement(control_statement_kind kind) @@ -454,8 +454,8 @@ check_case_label_bitand(const tnode_t *c return; lint_assert(case_expr->tn_op == CON); - case_value = case_expr->tn_val.v_quad; - mask = switch_expr->tn_right->tn_val.v_quad; + case_value = case_expr->tn_val.u.integer; + mask = switch_expr->tn_right->tn_val.u.integer; if ((case_value & ~mask) != 0) { /* statement not reached */ @@ -540,17 +540,17 @@ check_case_label(tnode_t *tn, control_st /* look if we had this value already */ for (cl = cs->c_case_labels; cl != NULL; cl = cl->cl_next) { - if (cl->cl_val.v_quad == nv.v_quad) + if (cl->cl_val.u.integer == nv.u.integer) break; } if (cl != NULL && is_uinteger(nv.v_tspec)) { /* duplicate case in switch: %lu */ - error(200, (unsigned long)nv.v_quad); + error(200, (unsigned long)nv.u.integer); } else if (cl != NULL) { /* duplicate case in switch: %ld */ - error(199, (long)nv.v_quad); + error(199, (long)nv.u.integer); } else { - check_getopt_case_label(nv.v_quad); + check_getopt_case_label(nv.u.integer); /* append the value to the list of case values */ cl = xcalloc(1, sizeof(*cl)); @@ -1331,5 +1331,5 @@ void longlong(int n) { - quadflg = true; + long_long_flag = true; } Index: src/usr.bin/xlint/lint1/lex.c diff -u src/usr.bin/xlint/lint1/lex.c:1.165 src/usr.bin/xlint/lint1/lex.c:1.166 --- src/usr.bin/xlint/lint1/lex.c:1.165 Sun Jul 2 10:20:45 2023 +++ src/usr.bin/xlint/lint1/lex.c Sun Jul 2 18:14:44 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: lex.c,v 1.165 2023/07/02 10:20:45 rillig Exp $ */ +/* $NetBSD: lex.c,v 1.166 2023/07/02 18:14:44 rillig Exp $ */ /* * Copyright (c) 1996 Christopher G. Demetriou. All Rights Reserved. @@ -38,7 +38,7 @@ #include <sys/cdefs.h> #if defined(__RCSID) -__RCSID("$NetBSD: lex.c,v 1.165 2023/07/02 10:20:45 rillig Exp $"); +__RCSID("$NetBSD: lex.c,v 1.166 2023/07/02 18:14:44 rillig Exp $"); #endif #include <ctype.h> @@ -506,7 +506,7 @@ lex_integer_constant(const char *yytext, bool warned = false; errno = 0; char *eptr; - uint64_t uq = (uint64_t)strtoull(cp, &eptr, base); + uint64_t ui = (uint64_t)strtoull(cp, &eptr, base); lint_assert(eptr == cp + len); if (errno != 0) { /* integer constant out of range */ @@ -514,7 +514,7 @@ lex_integer_constant(const char *yytext, warned = true; } - if (any_query_enabled && base == 8 && uq != 0) { + if (any_query_enabled && base == 8 && ui != 0) { /* octal number '%.*s' */ query_message(8, (int)len, cp); } @@ -526,15 +526,15 @@ lex_integer_constant(const char *yytext, bool ansiu = false; switch (typ) { case INT: - if (uq <= TARG_INT_MAX) { + if (ui <= TARG_INT_MAX) { /* ok */ - } else if (uq <= TARG_UINT_MAX && base != 10) { + } else if (ui <= TARG_UINT_MAX && base != 10) { typ = UINT; - } else if (uq <= TARG_LONG_MAX) { + } else if (ui <= TARG_LONG_MAX) { typ = LONG; } else { typ = ULONG; - if (uq > TARG_ULONG_MAX && !warned) { + if (ui > TARG_ULONG_MAX && !warned) { /* integer constant out of range */ warning(252); } @@ -552,37 +552,37 @@ lex_integer_constant(const char *yytext, } break; case UINT: - if (uq > TARG_UINT_MAX) { + if (ui > TARG_UINT_MAX) { typ = ULONG; - if (uq > TARG_ULONG_MAX && !warned) { + if (ui > TARG_ULONG_MAX && !warned) { /* integer constant out of range */ warning(252); } } break; case LONG: - if (uq > TARG_LONG_MAX && allow_c90) { + if (ui > TARG_LONG_MAX && allow_c90) { typ = ULONG; if (allow_trad) ansiu = true; - if (uq > TARG_ULONG_MAX && !warned) { + if (ui > TARG_ULONG_MAX && !warned) { /* integer constant out of range */ warning(252); } } break; case ULONG: - if (uq > TARG_ULONG_MAX && !warned) { + if (ui > TARG_ULONG_MAX && !warned) { /* integer constant out of range */ warning(252); } break; case QUAD: - if (uq > TARG_QUAD_MAX && allow_c90) + if (ui > TARG_QUAD_MAX && allow_c90) typ = UQUAD; break; case UQUAD: - if (uq > TARG_UQUAD_MAX && !warned) { + if (ui > TARG_UQUAD_MAX && !warned) { /* integer constant out of range */ warning(252); } @@ -591,33 +591,33 @@ lex_integer_constant(const char *yytext, break; } - uq = (uint64_t)convert_integer((int64_t)uq, typ, 0); + ui = (uint64_t)convert_integer((int64_t)ui, typ, 0); yylval.y_val = xcalloc(1, sizeof(*yylval.y_val)); yylval.y_val->v_tspec = typ; yylval.y_val->v_unsigned_since_c90 = ansiu; - yylval.y_val->v_quad = (int64_t)uq; + yylval.y_val->u.integer = (int64_t)ui; return T_CON; } /* - * Extend or truncate q to match t. If t is signed, sign-extend. + * Extend or truncate si to match t. If t is signed, sign-extend. * * len is the number of significant bits. If len is 0, len is set * to the width of type t. */ int64_t -convert_integer(int64_t q, tspec_t t, unsigned int len) +convert_integer(int64_t si, tspec_t t, unsigned int len) { if (len == 0) len = size_in_bits(t); uint64_t vbits = value_bits(len); - return t == PTR || is_uinteger(t) || ((q & bit(len - 1)) == 0) - ? (int64_t)(q & vbits) - : (int64_t)(q | ~vbits); + return t == PTR || is_uinteger(t) || ((si & bit(len - 1)) == 0) + ? (int64_t)(si & vbits) + : (int64_t)(si | ~vbits); } int @@ -671,7 +671,7 @@ lex_floating_constant(const char *yytext yylval.y_val = xcalloc(1, sizeof(*yylval.y_val)); yylval.y_val->v_tspec = typ; - yylval.y_val->v_ldbl = ld; + yylval.y_val->u.floating = ld; return T_CON; } @@ -879,7 +879,7 @@ lex_character_constant(void) yylval.y_val = xcalloc(1, sizeof(*yylval.y_val)); yylval.y_val->v_tspec = INT; yylval.y_val->v_char_constant = true; - yylval.y_val->v_quad = val; + yylval.y_val->u.integer = val; return T_CON; } @@ -927,7 +927,7 @@ lex_wide_character_constant(void) yylval.y_val = xcalloc(1, sizeof(*yylval.y_val)); yylval.y_val->v_tspec = WCHAR; yylval.y_val->v_char_constant = true; - yylval.y_val->v_quad = wc; + yylval.y_val->u.integer = wc; return T_CON; } @@ -1169,7 +1169,7 @@ clear_warn_flags(void) { lwarn = LWARN_ALL; - quadflg = false; + long_long_flag = false; constcond_flag = false; } Index: src/usr.bin/xlint/lint1/lint1.h diff -u src/usr.bin/xlint/lint1/lint1.h:1.176 src/usr.bin/xlint/lint1/lint1.h:1.177 --- src/usr.bin/xlint/lint1/lint1.h:1.176 Sun Jul 2 17:41:30 2023 +++ src/usr.bin/xlint/lint1/lint1.h Sun Jul 2 18:14:44 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: lint1.h,v 1.176 2023/07/02 17:41:30 rillig Exp $ */ +/* $NetBSD: lint1.h,v 1.177 2023/07/02 18:14:44 rillig Exp $ */ /* * Copyright (c) 1996 Christopher G. Demetriou. All Rights Reserved. @@ -102,14 +102,11 @@ typedef struct { bool v_unsigned_since_c90; bool v_char_constant; union { - int64_t _v_quad; /* integers */ - long double _v_ldbl; /* floats */ - } v_u; + int64_t integer; + long double floating; + } u; } val_t; -#define v_quad v_u._v_quad -#define v_ldbl v_u._v_ldbl - /* * Structures of type struct_or_union uniquely identify structures. This can't * be done in structures of type type_t, because these are copied if they must @@ -527,8 +524,8 @@ static inline bool is_nonzero_val(const val_t *val) { return is_floating(val->v_tspec) - ? val->v_ldbl != 0.0 - : val->v_quad != 0; + ? val->u.floating != 0.0 + : val->u.integer != 0; } static inline bool @@ -572,9 +569,9 @@ bit(unsigned i) } static inline bool -msb(int64_t q, tspec_t t) +msb(int64_t si, tspec_t t) { - return (q & bit((unsigned int)size_in_bits(t) - 1)) != 0; + return (si & bit((unsigned int)size_in_bits(t) - 1)) != 0; } static inline uint64_t Index: src/usr.bin/xlint/lint1/tree.c diff -u src/usr.bin/xlint/lint1/tree.c:1.543 src/usr.bin/xlint/lint1/tree.c:1.544 --- src/usr.bin/xlint/lint1/tree.c:1.543 Sun Jul 2 08:16:19 2023 +++ src/usr.bin/xlint/lint1/tree.c Sun Jul 2 18:14:44 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: tree.c,v 1.543 2023/07/02 08:16:19 rillig Exp $ */ +/* $NetBSD: tree.c,v 1.544 2023/07/02 18:14:44 rillig Exp $ */ /* * Copyright (c) 1994, 1995 Jochen Pohl @@ -37,7 +37,7 @@ #include <sys/cdefs.h> #if defined(__RCSID) -__RCSID("$NetBSD: tree.c,v 1.543 2023/07/02 08:16:19 rillig Exp $"); +__RCSID("$NetBSD: tree.c,v 1.544 2023/07/02 18:14:44 rillig Exp $"); #endif #include <float.h> @@ -134,14 +134,14 @@ ic_con(const type_t *tp, const val_t *v) integer_constraints c; lint_assert(is_integer(tp->t_tspec)); - int64_t s = v->v_quad; - uint64_t u = (uint64_t)s; - c.smin = s; - c.smax = s; - c.umin = u; - c.umax = u; - c.bset = u; - c.bclr = ~u; + int64_t si = v->u.integer; + uint64_t ui = (uint64_t)si; + c.smin = si; + c.smax = si; + c.umin = ui; + c.umax = ui; + c.bset = ui; + c.bclr = ~ui; return c; } @@ -374,16 +374,14 @@ build_constant(type_t *tp, val_t *v) tnode_t *n = expr_alloc_tnode(); n->tn_op = CON; n->tn_type = tp; + n->tn_val = *v; n->tn_val.v_tspec = tp->t_tspec; - n->tn_val.v_unsigned_since_c90 = v->v_unsigned_since_c90; - n->tn_val.v_char_constant = v->v_char_constant; - n->tn_val.v_u = v->v_u; free(v); return n; } static tnode_t * -build_integer_constant(tspec_t t, int64_t q) +build_integer_constant(tspec_t t, int64_t si) { tnode_t *n = expr_alloc_tnode(); @@ -392,7 +390,7 @@ build_integer_constant(tspec_t t, int64_ n->tn_val.v_tspec = t; n->tn_val.v_unsigned_since_c90 = false; n->tn_val.v_char_constant = false; - n->tn_val.v_quad = q; + n->tn_val.u.integer = si; return n; } @@ -508,13 +506,13 @@ build_name(sym_t *sym, bool is_funcname) n->tn_val.v_tspec = BOOL; n->tn_val.v_unsigned_since_c90 = false; n->tn_val.v_char_constant = false; - n->tn_val.v_quad = sym->u.s_bool_constant ? 1 : 0; + n->tn_val.u.integer = sym->u.s_bool_constant ? 1 : 0; } else if (sym->s_scl == ENUM_CONST) { n->tn_op = CON; n->tn_val.v_tspec = INT; /* ENUM is in n->tn_type */ n->tn_val.v_unsigned_since_c90 = false; n->tn_val.v_char_constant = false; - n->tn_val.v_quad = sym->u.s_enum_constant; + n->tn_val.u.integer = sym->u.s_enum_constant; } else { n->tn_op = NAME; n->tn_sym = sym; @@ -576,8 +574,8 @@ is_out_of_char_range(const tnode_t *tn) { return tn->tn_op == CON && !tn->tn_val.v_char_constant && - !(0 <= tn->tn_val.v_quad && - tn->tn_val.v_quad < 1 << (CHAR_SIZE - 1)); + !(0 <= tn->tn_val.u.integer && + tn->tn_val.u.integer < 1 << (CHAR_SIZE - 1)); } static void @@ -598,13 +596,13 @@ check_integer_comparison(op_t op, tnode_ !rn->tn_val.v_char_constant) { /* comparison '%s' of 'char' with plain integer %d */ query_message(14, - op_name(op), (int)rn->tn_val.v_quad); + op_name(op), (int)rn->tn_val.u.integer); } if (rt == CHAR && ln->tn_op == CON && !ln->tn_val.v_char_constant) { /* comparison '%s' of 'char' with plain integer %d */ query_message(14, - op_name(op), (int)ln->tn_val.v_quad); + op_name(op), (int)ln->tn_val.u.integer); } } @@ -612,7 +610,7 @@ check_integer_comparison(op_t op, tnode_ if (lt == CHAR && is_out_of_char_range(rn)) { char buf[128]; (void)snprintf(buf, sizeof(buf), "%s %d", - op_name(op), (int)rn->tn_val.v_quad); + op_name(op), (int)rn->tn_val.u.integer); /* nonportable character comparison '%s' */ warning(230, buf); return; @@ -620,7 +618,7 @@ check_integer_comparison(op_t op, tnode_ if (rt == CHAR && is_out_of_char_range(ln)) { char buf[128]; (void)snprintf(buf, sizeof(buf), "%d %s ?", - (int)ln->tn_val.v_quad, op_name(op)); + (int)ln->tn_val.u.integer, op_name(op)); /* nonportable character comparison '%s' */ warning(230, buf); return; @@ -628,8 +626,8 @@ check_integer_comparison(op_t op, tnode_ } if (is_uinteger(lt) && !is_uinteger(rt) && - rn->tn_op == CON && rn->tn_val.v_quad <= 0) { - if (rn->tn_val.v_quad < 0) { + rn->tn_op == CON && rn->tn_val.u.integer <= 0) { + if (rn->tn_val.u.integer < 0) { /* operator '%s' compares '%s' with '%s' */ warning(162, op_name(op), type_name(ln->tn_type), "negative constant"); @@ -640,8 +638,8 @@ check_integer_comparison(op_t op, tnode_ return; } if (is_uinteger(rt) && !is_uinteger(lt) && - ln->tn_op == CON && ln->tn_val.v_quad <= 0) { - if (ln->tn_val.v_quad < 0) { + ln->tn_op == CON && ln->tn_val.u.integer <= 0) { + if (ln->tn_val.u.integer < 0) { /* operator '%s' compares '%s' with '%s' */ warning(162, op_name(op), "negative constant", type_name(rn->tn_type)); @@ -800,37 +798,37 @@ fold(tnode_t *tn) tspec_t t = tn->tn_left->tn_type->t_tspec; bool utyp = !is_integer(t) || is_uinteger(t); - int64_t sl = tn->tn_left->tn_val.v_quad, sr = 0; + int64_t sl = tn->tn_left->tn_val.u.integer, sr = 0; uint64_t ul = sl, ur = 0; if (is_binary(tn)) - ur = sr = tn->tn_right->tn_val.v_quad; + ur = sr = tn->tn_right->tn_val.u.integer; int64_t mask = (int64_t)value_bits(size_in_bits(t)); bool ovfl = false; - int64_t q; + int64_t si; switch (tn->tn_op) { case UPLUS: - q = sl; + si = sl; break; case UMINUS: - q = sl == INT64_MIN ? sl : -sl; - if (sl != 0 && msb(q, t) == msb(sl, t)) + si = sl == INT64_MIN ? sl : -sl; + if (sl != 0 && msb(si, t) == msb(sl, t)) ovfl = true; break; case COMPL: - q = ~sl; + si = ~sl; break; case MULT: if (utyp) { - q = (int64_t)(ul * ur); - if (q != (q & mask)) + si = (int64_t)(ul * ur); + if (si != (si & mask)) ovfl = true; - else if ((ul != 0) && ((q / ul) != ur)) + else if ((ul != 0) && ((si / ul) != ur)) ovfl = true; } else { - q = sl * sr; - if (msb(q, t) != (msb(sl, t) ^ msb(sr, t))) + si = sl * sr; + if (msb(si, t) != (msb(sl, t) ^ msb(sr, t))) ovfl = true; } break; @@ -838,38 +836,38 @@ fold(tnode_t *tn) if (sr == 0) { /* division by 0 */ error(139); - q = utyp ? -1 : INT64_MAX; + si = utyp ? -1 : INT64_MAX; } else { - q = utyp ? (int64_t)(ul / ur) : sl / sr; + si = utyp ? (int64_t)(ul / ur) : sl / sr; } break; case MOD: if (sr == 0) { /* modulus by 0 */ error(140); - q = 0; + si = 0; } else { - q = utyp ? (int64_t)(ul % ur) : sl % sr; + si = utyp ? (int64_t)(ul % ur) : sl % sr; } break; case PLUS: - q = utyp ? (int64_t)(ul + ur) : sl + sr; - if (msb(sl, t) && msb(sr, t) && !msb(q, t)) + si = utyp ? (int64_t)(ul + ur) : sl + sr; + if (msb(sl, t) && msb(sr, t) && !msb(si, t)) ovfl = true; - if (!utyp && !msb(sl, t) && !msb(sr, t) && msb(q, t)) + if (!utyp && !msb(sl, t) && !msb(sr, t) && msb(si, t)) ovfl = true; break; case MINUS: - q = utyp ? (int64_t)(ul - ur) : sl - sr; - if (!utyp && msb(sl, t) && !msb(sr, t) && !msb(q, t)) + si = utyp ? (int64_t)(ul - ur) : sl - sr; + if (!utyp && msb(sl, t) && !msb(sr, t) && !msb(si, t)) ovfl = true; - if (!msb(sl, t) && msb(sr, t) && msb(q, t)) + if (!msb(sl, t) && msb(sr, t) && msb(si, t)) ovfl = true; break; case SHL: /* TODO: warn about out-of-bounds 'sr'. */ /* TODO: warn about overflow in signed '<<'. */ - q = utyp ? (int64_t)(ul << (sr & 63)) : sl << (sr & 63); + si = utyp ? (int64_t)(ul << (sr & 63)) : sl << (sr & 63); break; case SHR: /* @@ -877,35 +875,35 @@ fold(tnode_t *tn) * shifts of signed values are implementation dependent. */ /* TODO: warn about out-of-bounds 'sr'. */ - q = (int64_t)(ul >> (sr & 63)); - q = convert_integer(q, t, size_in_bits(t) - (int)sr); + si = (int64_t)(ul >> (sr & 63)); + si = convert_integer(si, t, size_in_bits(t) - (int)sr); break; case LT: - q = (utyp ? ul < ur : sl < sr) ? 1 : 0; + si = (utyp ? ul < ur : sl < sr) ? 1 : 0; break; case LE: - q = (utyp ? ul <= ur : sl <= sr) ? 1 : 0; + si = (utyp ? ul <= ur : sl <= sr) ? 1 : 0; break; case GE: - q = (utyp ? ul >= ur : sl >= sr) ? 1 : 0; + si = (utyp ? ul >= ur : sl >= sr) ? 1 : 0; break; case GT: - q = (utyp ? ul > ur : sl > sr) ? 1 : 0; + si = (utyp ? ul > ur : sl > sr) ? 1 : 0; break; case EQ: - q = (utyp ? ul == ur : sl == sr) ? 1 : 0; + si = (utyp ? ul == ur : sl == sr) ? 1 : 0; break; case NE: - q = (utyp ? ul != ur : sl != sr) ? 1 : 0; + si = (utyp ? ul != ur : sl != sr) ? 1 : 0; break; case BITAND: - q = utyp ? (int64_t)(ul & ur) : sl & sr; + si = utyp ? (int64_t)(ul & ur) : sl & sr; break; case BITXOR: - q = utyp ? (int64_t)(ul ^ ur) : sl ^ sr; + si = utyp ? (int64_t)(ul ^ ur) : sl ^ sr; break; case BITOR: - q = utyp ? (int64_t)(ul | ur) : sl | sr; + si = utyp ? (int64_t)(ul | ur) : sl | sr; break; default: lint_assert(/*CONSTCOND*/false); @@ -913,13 +911,13 @@ fold(tnode_t *tn) /* XXX: The overflow check does not work for 64-bit integers. */ if (ovfl || - ((uint64_t)(q | mask) != ~(uint64_t)0 && (q & ~mask) != 0)) { + ((uint64_t)(si | mask) != ~(uint64_t)0 && (si & ~mask) != 0)) { if (hflag) /* integer overflow detected, op '%s' */ warning(141, op_name(tn->tn_op)); } - v->v_quad = convert_integer(q, t, 0); + v->u.integer = convert_integer(si, t, 0); tnode_t *cn = build_constant(tn->tn_type, v); if (tn->tn_left->tn_system_dependent) @@ -1169,7 +1167,7 @@ is_null_pointer(const tnode_t *tn) return ((t == PTR && tn->tn_type->t_subt->t_tspec == VOID) || is_integer(t)) - && (tn->tn_op == CON && tn->tn_val.v_quad == 0); + && (tn->tn_op == CON && tn->tn_val.u.integer == 0); } /* Return a type based on tp1, with added qualifiers from tp2. */ @@ -1506,13 +1504,13 @@ fold_bool(tnode_t *tn) if (hflag && !constcond_flag) /* constant argument to '!' */ warning(239); - v->v_quad = !l ? 1 : 0; + v->u.integer = !l ? 1 : 0; break; case LOGAND: - v->v_quad = l && r ? 1 : 0; + v->u.integer = l && r ? 1 : 0; break; case LOGOR: - v->v_quad = l || r ? 1 : 0; + v->u.integer = l || r ? 1 : 0; break; default: lint_assert(/*CONSTCOND*/false); @@ -1580,67 +1578,67 @@ fold_float(tnode_t *tn) lint_assert(t == tn->tn_left->tn_type->t_tspec); lint_assert(!is_binary(tn) || t == tn->tn_right->tn_type->t_tspec); - long double lv = tn->tn_left->tn_val.v_ldbl; - long double rv = is_binary(tn) ? tn->tn_right->tn_val.v_ldbl : 0.0; + long double lv = tn->tn_left->tn_val.u.floating; + long double rv = is_binary(tn) ? tn->tn_right->tn_val.u.floating : 0.0; switch (tn->tn_op) { case UPLUS: - v->v_ldbl = lv; + v->u.floating = lv; break; case UMINUS: - v->v_ldbl = -lv; + v->u.floating = -lv; break; case MULT: - v->v_ldbl = lv * rv; + v->u.floating = lv * rv; break; case DIV: if (rv == 0.0) { /* division by 0 */ error(139); - v->v_ldbl = floating_error_value(t, lv); + v->u.floating = floating_error_value(t, lv); } else { - v->v_ldbl = lv / rv; + v->u.floating = lv / rv; } break; case PLUS: - v->v_ldbl = lv + rv; + v->u.floating = lv + rv; break; case MINUS: - v->v_ldbl = lv - rv; + v->u.floating = lv - rv; break; case LT: - v->v_quad = lv < rv ? 1 : 0; + v->u.integer = lv < rv ? 1 : 0; break; case LE: - v->v_quad = lv <= rv ? 1 : 0; + v->u.integer = lv <= rv ? 1 : 0; break; case GE: - v->v_quad = lv >= rv ? 1 : 0; + v->u.integer = lv >= rv ? 1 : 0; break; case GT: - v->v_quad = lv > rv ? 1 : 0; + v->u.integer = lv > rv ? 1 : 0; break; case EQ: - v->v_quad = lv == rv ? 1 : 0; + v->u.integer = lv == rv ? 1 : 0; break; case NE: - v->v_quad = lv != rv ? 1 : 0; + v->u.integer = lv != rv ? 1 : 0; break; default: lint_assert(/*CONSTCOND*/false); } - lint_assert(fpe != 0 || isnan(v->v_ldbl) == 0); + lint_assert(fpe != 0 || isnan(v->u.floating) == 0); if (is_complex(v->v_tspec)) { /* * Don't warn, as lint doesn't model the imaginary part of * complex numbers. */ fpe = 0; - } else if (is_floating_overflow(t, v->v_ldbl)) { + } else if (is_floating_overflow(t, v->u.floating)) { /* floating point overflow on operator '%s' */ warning(142, op_name(tn->tn_op)); - v->v_ldbl = floating_error_value(t, v->v_ldbl); + v->u.floating = floating_error_value(t, v->u.floating); fpe = 0; } @@ -1821,7 +1819,7 @@ build_binary(tnode_t *ln, op_t op, bool ntn = fold(ntn); } } else if (op == QUEST && ln->tn_op == CON) { - ntn = ln->tn_val.v_quad != 0 + ntn = ln->tn_val.u.integer != 0 ? rn->tn_left : rn->tn_right; } } @@ -2277,14 +2275,14 @@ typeok_shr(const mod_t *mp, if (ln->tn_op != CON) { /* bitwise '%s' on signed value possibly nonportable */ warning(117, mp->m_name); - } else if (ln->tn_val.v_quad < 0) { + } else if (ln->tn_val.u.integer < 0) { /* bitwise '%s' on signed value nonportable */ warning(120, mp->m_name); } } else if (allow_trad && allow_c90 && !is_uinteger(olt) && is_uinteger(ort)) { /* The left operand would become unsigned in traditional C. */ - if (hflag && (ln->tn_op != CON || ln->tn_val.v_quad < 0)) { + if (hflag && (ln->tn_op != CON || ln->tn_val.u.integer < 0)) { /* semantics of '%s' change in ANSI C; use ... */ warning(118, mp->m_name); } @@ -2295,7 +2293,7 @@ typeok_shr(const mod_t *mp, * In traditional C the left operand would be extended * (possibly sign-extended) and then shifted. */ - if (hflag && (ln->tn_op != CON || ln->tn_val.v_quad < 0)) { + if (hflag && (ln->tn_op != CON || ln->tn_val.u.integer < 0)) { /* semantics of '%s' change in ANSI C; use ... */ warning(118, mp->m_name); } @@ -2331,16 +2329,17 @@ typeok_shift(const type_t *ltp, tspec_t if (rn->tn_op != CON) return; - if (!is_uinteger(rt) && rn->tn_val.v_quad < 0) { + if (!is_uinteger(rt) && rn->tn_val.u.integer < 0) { /* negative shift */ warning(121); - } else if ((uint64_t)rn->tn_val.v_quad == + } else if ((uint64_t)rn->tn_val.u.integer == (uint64_t)size_in_bits(lt)) { /* shift amount %u equals bit-size of '%s' */ - warning(267, (unsigned)rn->tn_val.v_quad, type_name(ltp)); - } else if ((uint64_t)rn->tn_val.v_quad > (uint64_t)size_in_bits(lt)) { + warning(267, (unsigned)rn->tn_val.u.integer, type_name(ltp)); + } else if ((uint64_t)rn->tn_val.u.integer + > (uint64_t)size_in_bits(lt)) { /* shift amount %llu is greater than bit-size %llu of '%s' */ - warning(122, (unsigned long long)rn->tn_val.v_quad, + warning(122, (unsigned long long)rn->tn_val.u.integer, (unsigned long long)size_in_bits(lt), tspec_name(lt)); } @@ -2971,7 +2970,7 @@ is_int_constant_zero(const tnode_t *tn) return tn->tn_op == CON && tn->tn_type->t_tspec == INT && - tn->tn_val.v_quad == 0; + tn->tn_val.u.integer == 0; } static void @@ -3153,7 +3152,7 @@ check_enum_int_mismatch(op_t op, int arg */ if (!rn->tn_type->t_is_enum && rn->tn_op == CON && is_integer(rn->tn_type->t_tspec) && - rn->tn_val.v_quad == 0) { + rn->tn_val.u.integer == 0) { return; } /* initialization of '%s' with '%s' */ @@ -3342,7 +3341,7 @@ should_warn_about_prototype_conversion(t */ if (ptn->tn_op == CON && is_integer(nt) && signed_type(nt) == signed_type(ot) && - !msb(ptn->tn_val.v_quad, ot)) + !msb(ptn->tn_val.u.integer, ot)) return false; return true; @@ -3718,7 +3717,7 @@ convert_constant_floating(op_t op, int a default: lint_assert(/*CONSTCOND*/false); } - if (v->v_ldbl > max || v->v_ldbl < min) { + if (v->u.floating > max || v->u.floating < min) { lint_assert(nt != LDOUBLE); if (op == FARG) { /* conversion of '%s' to '%s' is out of range, ... */ @@ -3728,17 +3727,17 @@ convert_constant_floating(op_t op, int a /* conversion of '%s' to '%s' is out of range */ warning(119, type_name(gettyp(ot)), type_name(tp)); } - v->v_ldbl = v->v_ldbl > 0 ? max : min; + v->u.floating = v->u.floating > 0 ? max : min; } if (nt == FLOAT || nt == FCOMPLEX) - nv->v_ldbl = (float)v->v_ldbl; + nv->u.floating = (float)v->u.floating; else if (nt == DOUBLE || nt == DCOMPLEX) - nv->v_ldbl = (double)v->v_ldbl; + nv->u.floating = (double)v->u.floating; else if (nt == LDOUBLE || nt == LCOMPLEX) - nv->v_ldbl = v->v_ldbl; + nv->u.floating = v->u.floating; else - nv->v_quad = (int64_t)v->v_ldbl; + nv->u.integer = (int64_t)v->u.floating; } static bool @@ -3746,14 +3745,15 @@ convert_constant_to_floating(tspec_t nt, tspec_t ot, const val_t *v) { if (nt == FLOAT) { - nv->v_ldbl = (ot == PTR || is_uinteger(ot)) ? - (float)(uint64_t)v->v_quad : (float)v->v_quad; + nv->u.floating = (ot == PTR || is_uinteger(ot)) ? + (float)(uint64_t)v->u.integer : (float)v->u.integer; } else if (nt == DOUBLE) { - nv->v_ldbl = (ot == PTR || is_uinteger(ot)) ? - (double)(uint64_t)v->v_quad : (double)v->v_quad; + nv->u.floating = (ot == PTR || is_uinteger(ot)) ? + (double)(uint64_t)v->u.integer : (double)v->u.integer; } else if (nt == LDOUBLE) { - nv->v_ldbl = (ot == PTR || is_uinteger(ot)) ? - (long double)(uint64_t)v->v_quad : (long double)v->v_quad; + nv->u.floating = (ot == PTR || is_uinteger(ot)) + ? (long double)(uint64_t)v->u.integer + : (long double)v->u.integer; } else return false; return true; @@ -3767,7 +3767,7 @@ static void convert_constant_check_range_bitor(size_t nsz, size_t osz, const val_t *v, uint64_t xmask, op_t op) { - if (nsz < osz && (v->v_quad & xmask) != 0) { + if (nsz < osz && (v->u.integer & xmask) != 0) { /* constant truncated by conversion, op '%s' */ warning(306, op_name(op)); } @@ -3785,14 +3785,14 @@ convert_constant_check_range_bitand(size const type_t *tp, op_t op) { if (nsz > osz && - (nv->v_quad & bit((unsigned int)(osz - 1))) != 0 && - (nv->v_quad & xmask) != xmask) { + (nv->u.integer & bit((unsigned int)(osz - 1))) != 0 && + (nv->u.integer & xmask) != xmask) { /* extra bits set to 0 in conversion of '%s' to '%s', ... */ warning(309, type_name(gettyp(ot)), type_name(tp), op_name(op)); } else if (nsz < osz && - (v->v_quad & xmask) != xmask && - (v->v_quad & xmask) != 0) { + (v->u.integer & xmask) != xmask && + (v->u.integer & xmask) != 0) { /* constant truncated by conversion, op '%s' */ warning(306, op_name(op)); } @@ -3901,13 +3901,13 @@ convert_constant_check_range(tspec_t ot, nbitsz, obitsz, xmask, nv, ot, v, tp, op); } else if ((nt != PTR && is_uinteger(nt)) && (ot != PTR && !is_uinteger(ot)) && - v->v_quad < 0) + v->u.integer < 0) convert_constant_check_range_signed(op, arg); - else if (nv->v_quad != v->v_quad && nbitsz <= obitsz && - (v->v_quad & xmask) != 0 && - (is_uinteger(ot) || (v->v_quad & xmsk1) != xmsk1)) + else if (nv->u.integer != v->u.integer && nbitsz <= obitsz && + (v->u.integer & xmask) != 0 && + (is_uinteger(ot) || (v->u.integer & xmsk1) != xmsk1)) warn_constant_check_range_truncated(op, arg, tp, ot); - else if (nv->v_quad != v->v_quad) + else if (nv->u.integer != v->u.integer) warn_constant_check_range_loss(op, arg, tp, ot); } @@ -3933,7 +3933,7 @@ convert_constant(op_t op, int arg, const if (nt == BOOL) { /* C99 6.3.1.2 */ nv->v_unsigned_since_c90 = false; - nv->v_quad = is_nonzero_val(v) ? 1 : 0; + nv->u.integer = is_nonzero_val(v) ? 1 : 0; return; } @@ -3941,7 +3941,7 @@ convert_constant(op_t op, int arg, const convert_constant_floating(op, arg, ot, tp, nt, v, nv); else if (!convert_constant_to_floating(nt, nv, ot, v)) { range_check = true; /* Check for lost precision. */ - nv->v_quad = v->v_quad; + nv->u.integer = v->u.integer; } if (allow_trad && allow_c90 && v->v_unsigned_since_c90 && @@ -3954,7 +3954,7 @@ convert_constant(op_t op, int arg, const } if (is_integer(nt)) { - nv->v_quad = convert_integer(nv->v_quad, nt, + nv->u.integer = convert_integer(nv->u.integer, nt, tp->t_bitfield ? tp->t_bit_field_width : size_in_bits(nt)); } @@ -4341,7 +4341,7 @@ integer_constant(tnode_t *tn, bool requi lint_assert(nerr != 0); debug_step("constant node is null; returning 1 instead"); v->v_tspec = INT; - v->v_quad = 1; + v->u.integer = 1; return v; } @@ -4352,12 +4352,12 @@ integer_constant(tnode_t *tn, bool requi if (is_integer(tn->tn_val.v_tspec)) { v->v_unsigned_since_c90 = tn->tn_val.v_unsigned_since_c90; - v->v_quad = tn->tn_val.v_quad; + v->u.integer = tn->tn_val.u.integer; return v; } - v->v_quad = (int64_t)tn->tn_val.v_ldbl; + v->u.integer = (int64_t)tn->tn_val.u.floating; } else { - v->v_quad = 1; + v->u.integer = 1; } if (required) @@ -4377,7 +4377,7 @@ static bool is_constcond_false(const tnode_t *tn, tspec_t t) { return (t == BOOL || t == INT) && - tn->tn_op == CON && tn->tn_val.v_quad == 0; + tn->tn_op == CON && tn->tn_val.u.integer == 0; } /* @@ -4457,7 +4457,7 @@ check_array_index(tnode_t *tn, bool ampe * For incomplete array types, we can print a warning only if * the index is negative. */ - if (is_incomplete(ln->tn_left->tn_type) && rn->tn_val.v_quad >= 0) + if (is_incomplete(ln->tn_left->tn_type) && rn->tn_val.u.integer >= 0) return; /* Get the size of one array element */ @@ -4468,8 +4468,8 @@ check_array_index(tnode_t *tn, bool ampe /* Change the unit of the index from bytes to element size. */ int64_t con = is_uinteger(rn->tn_type->t_tspec) - ? (int64_t)((uint64_t)rn->tn_val.v_quad / elsz) - : rn->tn_val.v_quad / elsz; + ? (int64_t)((uint64_t)rn->tn_val.u.integer / elsz) + : rn->tn_val.u.integer / elsz; int dim = ln->tn_left->tn_type->t_dim + (amper ? 1 : 0); @@ -4714,11 +4714,11 @@ constant_addr(const tnode_t *tn, const s case PLUS: offs1 = offs2 = 0; if (tn->tn_left->tn_op == CON) { - offs1 = (ptrdiff_t)tn->tn_left->tn_val.v_quad; + offs1 = (ptrdiff_t)tn->tn_left->tn_val.u.integer; if (!constant_addr(tn->tn_right, &sym, &offs2)) return false; } else if (tn->tn_right->tn_op == CON) { - offs2 = (ptrdiff_t)tn->tn_right->tn_val.v_quad; + offs2 = (ptrdiff_t)tn->tn_right->tn_val.u.integer; if (tn->tn_op == MINUS) offs2 = -offs2; if (!constant_addr(tn->tn_left, &sym, &offs1))