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))