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

Reply via email to