Module Name: src
Committed By: christos
Date: Fri Sep 7 15:16:15 UTC 2018
Modified Files:
src/usr.bin/xlint/common: inittyp.c lint.h lp64.h tyname.c
src/usr.bin/xlint/lint1: decl.c err.c scan.l tree.c
src/usr.bin/xlint/lint2: read.c
Log Message:
recognize int128
To generate a diff of this commit:
cvs rdiff -u -r1.11 -r1.12 src/usr.bin/xlint/common/inittyp.c
cvs rdiff -u -r1.13 -r1.14 src/usr.bin/xlint/common/lint.h
cvs rdiff -u -r1.4 -r1.5 src/usr.bin/xlint/common/lp64.h
cvs rdiff -u -r1.12 -r1.13 src/usr.bin/xlint/common/tyname.c
cvs rdiff -u -r1.68 -r1.69 src/usr.bin/xlint/lint1/decl.c
cvs rdiff -u -r1.52 -r1.53 src/usr.bin/xlint/lint1/err.c
cvs rdiff -u -r1.82 -r1.83 src/usr.bin/xlint/lint1/scan.l
cvs rdiff -u -r1.85 -r1.86 src/usr.bin/xlint/lint1/tree.c
cvs rdiff -u -r1.27 -r1.28 src/usr.bin/xlint/lint2/read.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/usr.bin/xlint/common/inittyp.c
diff -u src/usr.bin/xlint/common/inittyp.c:1.11 src/usr.bin/xlint/common/inittyp.c:1.12
--- src/usr.bin/xlint/common/inittyp.c:1.11 Tue Apr 14 21:20:57 2009
+++ src/usr.bin/xlint/common/inittyp.c Fri Sep 7 11:16:15 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: inittyp.c,v 1.11 2009/04/15 01:20:57 christos Exp $ */
+/* $NetBSD: inittyp.c,v 1.12 2018/09/07 15:16:15 christos Exp $ */
/*
* Copyright (c) 1994, 1995 Jochen Pohl
@@ -37,7 +37,7 @@
#include <sys/cdefs.h>
#if defined(__RCSID) && !defined(lint)
-__RCSID("$NetBSD: inittyp.c,v 1.11 2009/04/15 01:20:57 christos Exp $");
+__RCSID("$NetBSD: inittyp.c,v 1.12 2018/09/07 15:16:15 christos Exp $");
#endif
#include <limits.h>
@@ -104,6 +104,15 @@ inittyp(void)
{ UQUAD, { QUAD_SIZE, 8 * CHAR_BIT,
QUAD, UQUAD,
1, 1, 0, 1, 1, 0, "unsigned long long" } },
+#ifdef INT128_SIZE
+ { INT128, { INT128_SIZE, 16 * CHAR_BIT,
+ INT128, UINT128,
+ 1, 0, 0, 1, 1, 0, "__int128_t" } },
+ { UINT128, { INT128_SIZE, 16 * CHAR_BIT,
+ INT128, UINT128,
+ 1, 1, 0, 1, 1, 0, "__uint128_t" } },
+#endif
+
{ FLOAT, { FLOAT_SIZE, 4 * CHAR_BIT,
FLOAT, FLOAT,
0, 0, 1, 1, 1, 0, "float" } },
Index: src/usr.bin/xlint/common/lint.h
diff -u src/usr.bin/xlint/common/lint.h:1.13 src/usr.bin/xlint/common/lint.h:1.14
--- src/usr.bin/xlint/common/lint.h:1.13 Tue Apr 14 21:20:57 2009
+++ src/usr.bin/xlint/common/lint.h Fri Sep 7 11:16:15 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: lint.h,v 1.13 2009/04/15 01:20:57 christos Exp $ */
+/* $NetBSD: lint.h,v 1.14 2018/09/07 15:16:15 christos Exp $ */
/*
* Copyright (c) 1994, 1995 Jochen Pohl
@@ -64,6 +64,10 @@ typedef enum {
ULONG, /* unsigned long */
QUAD, /* (signed) long long */
UQUAD, /* unsigned long long */
+#ifdef INT128_SIZE
+ INT128, /* (signed) __int128_t */
+ UINT128, /* __uint128_t */
+#endif
FLOAT, /* float */
DOUBLE, /* double or, with tflag, long float */
LDOUBLE, /* long double */
Index: src/usr.bin/xlint/common/lp64.h
diff -u src/usr.bin/xlint/common/lp64.h:1.4 src/usr.bin/xlint/common/lp64.h:1.5
--- src/usr.bin/xlint/common/lp64.h:1.4 Tue Mar 27 15:24:03 2012
+++ src/usr.bin/xlint/common/lp64.h Fri Sep 7 11:16:15 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: lp64.h,v 1.4 2012/03/27 19:24:03 christos Exp $ */
+/* $NetBSD: lp64.h,v 1.5 2018/09/07 15:16:15 christos Exp $ */
/*
* Copyright (c) 2001 Wasabi Systems, Inc.
@@ -45,6 +45,7 @@
#define LONG_SIZE (8 * CHAR_BIT)
#define QUAD_SIZE (8 * CHAR_BIT)
#define PTR_SIZE (8 * CHAR_BIT)
+#define INT128_SIZE (16 * CHAR_BIT)
#define TARG_SCHAR_MAX ((signed char) (((unsigned char) -1) >> 1))
#define TARG_SCHAR_MIN ((-TARG_CHAR_MAX) - 1)
@@ -65,3 +66,7 @@
#define TARG_QUAD_MAX ((int64_t) (((uint64_t) -1) >> 1))
#define TARG_QUAD_MIN ((-TARG_QUAD_MAX) - 1)
#define TARG_UQUAD_MAX ((uint64_t) -1)
+
+#define TARG_INT128_MAX ((__int128_t) (((__uint128_t) -1) >> 1))
+#define TARG_INT128_MIN ((-TARG_INT128_MAX) - 1)
+#define TARG_UINT128_MAX ((__uint128_t) -1)
Index: src/usr.bin/xlint/common/tyname.c
diff -u src/usr.bin/xlint/common/tyname.c:1.12 src/usr.bin/xlint/common/tyname.c:1.13
--- src/usr.bin/xlint/common/tyname.c:1.12 Fri Aug 19 06:18:11 2016
+++ src/usr.bin/xlint/common/tyname.c Fri Sep 7 11:16:15 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: tyname.c,v 1.12 2016/08/19 10:18:11 christos Exp $ */
+/* $NetBSD: tyname.c,v 1.13 2018/09/07 15:16:15 christos Exp $ */
/*-
* Copyright (c) 2005 The NetBSD Foundation, Inc.
@@ -35,7 +35,7 @@
#include <sys/cdefs.h>
#if defined(__RCSID) && !defined(lint)
-__RCSID("$NetBSD: tyname.c,v 1.12 2016/08/19 10:18:11 christos Exp $");
+__RCSID("$NetBSD: tyname.c,v 1.13 2018/09/07 15:16:15 christos Exp $");
#endif
#include <limits.h>
@@ -68,6 +68,10 @@ basictyname(tspec_t t)
case ULONG: return "unsigned long";
case QUAD: return "long long";
case UQUAD: return "unsigned long long";
+#ifdef INT128_SIZE
+ case INT128: return "__int128_t";
+ case UINT128: return "__uint128_t";
+#endif
case FLOAT: return "float";
case DOUBLE: return "double";
case LDOUBLE: return "long double";
@@ -111,6 +115,10 @@ sametype(const type_t *t1, const type_t
case ULONG:
case QUAD:
case UQUAD:
+#ifdef INT128_SIZE
+ case INT128:
+ case UINT128:
+#endif
case FLOAT:
case DOUBLE:
case LDOUBLE:
@@ -182,6 +190,10 @@ tyname(char *buf, size_t bufsiz, const t
case ULONG:
case QUAD:
case UQUAD:
+#ifdef INT128_SIZE
+ case INT128:
+ case UINT128:
+#endif
case FLOAT:
case DOUBLE:
case LDOUBLE:
Index: src/usr.bin/xlint/lint1/decl.c
diff -u src/usr.bin/xlint/lint1/decl.c:1.68 src/usr.bin/xlint/lint1/decl.c:1.69
--- src/usr.bin/xlint/lint1/decl.c:1.68 Mon Mar 6 18:04:52 2017
+++ src/usr.bin/xlint/lint1/decl.c Fri Sep 7 11:16:15 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: decl.c,v 1.68 2017/03/06 23:04:52 christos Exp $ */
+/* $NetBSD: decl.c,v 1.69 2018/09/07 15:16:15 christos Exp $ */
/*
* Copyright (c) 1996 Christopher G. Demetriou. All Rights Reserved.
@@ -38,7 +38,7 @@
#include <sys/cdefs.h>
#if defined(__RCSID) && !defined(lint)
-__RCSID("$NetBSD: decl.c,v 1.68 2017/03/06 23:04:52 christos Exp $");
+__RCSID("$NetBSD: decl.c,v 1.69 2018/09/07 15:16:15 christos Exp $");
#endif
#include <sys/param.h>
@@ -446,6 +446,10 @@ tdeferr(type_t *td, tspec_t t)
case DOUBLE:
case UQUAD:
case QUAD:
+#ifdef INT128_SIZE
+ case UINT128:
+ case INT128:
+#endif
case ULONG:
case UINT:
case INT:
Index: src/usr.bin/xlint/lint1/err.c
diff -u src/usr.bin/xlint/lint1/err.c:1.52 src/usr.bin/xlint/lint1/err.c:1.53
--- src/usr.bin/xlint/lint1/err.c:1.52 Mon Jan 15 17:14:24 2018
+++ src/usr.bin/xlint/lint1/err.c Fri Sep 7 11:16:15 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: err.c,v 1.52 2018/01/15 22:14:24 christos Exp $ */
+/* $NetBSD: err.c,v 1.53 2018/09/07 15:16:15 christos Exp $ */
/*
* Copyright (c) 1994, 1995 Jochen Pohl
@@ -37,7 +37,7 @@
#include <sys/cdefs.h>
#if defined(__RCSID) && !defined(lint)
-__RCSID("$NetBSD: err.c,v 1.52 2018/01/15 22:14:24 christos Exp $");
+__RCSID("$NetBSD: err.c,v 1.53 2018/09/07 15:16:15 christos Exp $");
#endif
#include <sys/types.h>
@@ -244,7 +244,7 @@ const char *msgs[] = {
"incompatible pointer types (%s != %s)", /* 182 */
"illegal combination of %s (%s) and %s (%s)", /* 183 */
"illegal pointer combination", /* 184 */
- "initialisation type mismatch", /* 185 */
+ "initialisation type mismatch (%s) and (%s)", /* 185 */
"bit-field initialisation is illegal in traditional C", /* 186 */
"non-null byte ignored in string initializer", /* 187 */
"no automatic aggregate initialization in traditional C", /* 188 */
@@ -270,7 +270,7 @@ const char *msgs[] = {
"break outside loop or switch", /* 208 */
"continue outside loop", /* 209 */
"enum type mismatch in initialisation", /* 210 */
- "return value type mismatch", /* 211 */
+ "return value type mismatch (%s) and (%s)", /* 211 */
"cannot return incomplete type", /* 212 */
"void function %s cannot return value", /* 213 */
"function %s expects to return value", /* 214 */
Index: src/usr.bin/xlint/lint1/scan.l
diff -u src/usr.bin/xlint/lint1/scan.l:1.82 src/usr.bin/xlint/lint1/scan.l:1.83
--- src/usr.bin/xlint/lint1/scan.l:1.82 Sun Jul 8 13:48:42 2018
+++ src/usr.bin/xlint/lint1/scan.l Fri Sep 7 11:16:15 2018
@@ -1,5 +1,5 @@
%{
-/* $NetBSD: scan.l,v 1.82 2018/07/08 17:48:42 christos Exp $ */
+/* $NetBSD: scan.l,v 1.83 2018/09/07 15:16:15 christos Exp $ */
/*
* Copyright (c) 1996 Christopher G. Demetriou. All Rights Reserved.
@@ -35,7 +35,7 @@
#include <sys/cdefs.h>
#if defined(__RCSID) && !defined(lint)
-__RCSID("$NetBSD: scan.l,v 1.82 2018/07/08 17:48:42 christos Exp $");
+__RCSID("$NetBSD: scan.l,v 1.83 2018/09/07 15:16:15 christos Exp $");
#endif
#include <stdlib.h>
@@ -205,6 +205,10 @@ static struct kwtab {
u_int kw_attr : 1; /* GCC attribute, keyword */
u_int kw_deco : 3; /* name[1] __name[2] __name__[4] */
} kwtab[] = {
+#ifdef INT128_SIZE
+ { "__int128_t", T_TYPE, 0, INT128, 0, 0,1,0,0,1 },
+ { "__uint128_t",T_TYPE, 0, UINT128,0, 0,1,0,0,1 },
+#endif
{ "_Bool", T_TYPE, 0, BOOL, 0, 0,1,0,0,1 },
{ "_Complex", T_TYPE, 0, COMPLEX,0, 0,1,0,0,1 },
{ "_Generic", T_GENERIC, 0, 0, 0, 0,1,0,0,1 },
@@ -553,12 +557,20 @@ icon(int base)
const char *cp;
char c, *eptr;
tspec_t typ;
- uint64_t uq = 0;
int ansiu;
+#ifdef INT128_SIZE
+ __uint128_t uq = 0;
+ static tspec_t contypes[2][4] = {
+ { INT, LONG, QUAD, INT128, },
+ { UINT, ULONG, UQUAD, UINT128, }
+ };
+#else
+ uint64_t uq = 0;
static tspec_t contypes[2][3] = {
- { INT, LONG, QUAD },
- { UINT, ULONG, UQUAD }
+ { INT, LONG, QUAD, },
+ { UINT, ULONG, UQUAD, }
};
+#endif
cp = yytext;
len = yyleng;
@@ -675,6 +687,21 @@ icon(int base)
warning(252);
}
break;
+#ifdef INT128_SIZE
+ case INT128:
+ if (uq > TARG_INT128_MAX && !tflag) {
+ typ = UINT128;
+ if (!sflag)
+ ansiu = 1;
+ }
+ break;
+ case UINT128:
+ if (uq > TARG_UINT128_MAX) {
+ /* integer constant out of range */
+ warning(252);
+ }
+ break;
+#endif
/* LINTED206: (enumeration values not handled in switch) */
case STRUCT:
case VOID:
Index: src/usr.bin/xlint/lint1/tree.c
diff -u src/usr.bin/xlint/lint1/tree.c:1.85 src/usr.bin/xlint/lint1/tree.c:1.86
--- src/usr.bin/xlint/lint1/tree.c:1.85 Fri Jun 29 16:18:05 2018
+++ src/usr.bin/xlint/lint1/tree.c Fri Sep 7 11:16:15 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: tree.c,v 1.85 2018/06/29 20:18:05 christos Exp $ */
+/* $NetBSD: tree.c,v 1.86 2018/09/07 15:16:15 christos Exp $ */
/*
* Copyright (c) 1994, 1995 Jochen Pohl
@@ -37,7 +37,7 @@
#include <sys/cdefs.h>
#if defined(__RCSID) && !defined(lint)
-__RCSID("$NetBSD: tree.c,v 1.85 2018/06/29 20:18:05 christos Exp $");
+__RCSID("$NetBSD: tree.c,v 1.86 2018/09/07 15:16:15 christos Exp $");
#endif
#include <stdlib.h>
@@ -1298,11 +1298,13 @@ asgntypok(op_t op, int arg, tnode_t *ln,
switch (op) {
case INIT:
/* initialisation type mismatch */
- error(185);
+ error(185, tyname(lbuf, sizeof(lbuf), ltp),
+ tyname(rbuf, sizeof(rbuf), rtp));
break;
case RETURN:
/* return value type mismatch */
- error(211);
+ error(211, tyname(lbuf, sizeof(lbuf), ltp),
+ tyname(rbuf, sizeof(rbuf), rtp));
break;
case FARG:
/* argument is incompatible with prototype, arg #%d */
Index: src/usr.bin/xlint/lint2/read.c
diff -u src/usr.bin/xlint/lint2/read.c:1.27 src/usr.bin/xlint/lint2/read.c:1.28
--- src/usr.bin/xlint/lint2/read.c:1.27 Tue Dec 26 12:02:19 2017
+++ src/usr.bin/xlint/lint2/read.c Fri Sep 7 11:16:15 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: read.c,v 1.27 2017/12/26 17:02:19 christos Exp $ */
+/* $NetBSD: read.c,v 1.28 2018/09/07 15:16:15 christos Exp $ */
/*
* Copyright (c) 1996 Christopher G. Demetriou. All Rights Reserved.
@@ -38,7 +38,7 @@
#include <sys/cdefs.h>
#if defined(__RCSID) && !defined(lint)
-__RCSID("$NetBSD: read.c,v 1.27 2017/12/26 17:02:19 christos Exp $");
+__RCSID("$NetBSD: read.c,v 1.28 2018/09/07 15:16:15 christos Exp $");
#endif
#include <ctype.h>
@@ -713,6 +713,10 @@ inptype(const char *cp, const char **epp
case FLOAT:
case UQUAD:
case QUAD:
+#ifdef INT128_SIZE
+ case UINT128:
+ case INT128:
+#endif
case ULONG:
case UINT:
case INT:
@@ -952,9 +956,13 @@ gettlen(const char *cp, const char **epp
case LDOUBLE:
case VOID:
case ULONG:
+ case LONG:
case QUAD:
case UQUAD:
- case LONG:
+#ifdef INT128_SIZE
+ case INT128:
+ case UINT128:
+#endif
case FCOMPLEX:
case DCOMPLEX:
case LCOMPLEX: