Module Name: src
Committed By: rillig
Date: Thu Aug 29 20:35:19 UTC 2024
Modified Files:
src/tests/usr.bin/xlint/lint1: gcc.c
src/usr.bin/xlint/common: inittyp.c lint.h
src/usr.bin/xlint/lint1: cgram.y emit1.c init.c lex.c
src/usr.bin/xlint/lint2: emit2.c
Log Message:
lint: support GCC's __auto_type
Fixes PR toolchain/58654.
To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 src/tests/usr.bin/xlint/lint1/gcc.c
cvs rdiff -u -r1.42 -r1.43 src/usr.bin/xlint/common/inittyp.c
cvs rdiff -u -r1.50 -r1.51 src/usr.bin/xlint/common/lint.h
cvs rdiff -u -r1.506 -r1.507 src/usr.bin/xlint/lint1/cgram.y
cvs rdiff -u -r1.95 -r1.96 src/usr.bin/xlint/lint1/emit1.c
cvs rdiff -u -r1.269 -r1.270 src/usr.bin/xlint/lint1/init.c
cvs rdiff -u -r1.228 -r1.229 src/usr.bin/xlint/lint1/lex.c
cvs rdiff -u -r1.39 -r1.40 src/usr.bin/xlint/lint2/emit2.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/gcc.c
diff -u src/tests/usr.bin/xlint/lint1/gcc.c:1.3 src/tests/usr.bin/xlint/lint1/gcc.c:1.4
--- src/tests/usr.bin/xlint/lint1/gcc.c:1.3 Sat Jun 8 13:50:47 2024
+++ src/tests/usr.bin/xlint/lint1/gcc.c Thu Aug 29 20:35:19 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: gcc.c,v 1.3 2024/06/08 13:50:47 rillig Exp $ */
+/* $NetBSD: gcc.c,v 1.4 2024/08/29 20:35:19 rillig Exp $ */
# 3 "gcc.c"
/*
@@ -92,3 +92,10 @@ typeof_after_statement(void **ptr)
ret;
});
}
+
+const char *
+auto_type(const char *ptr)
+{
+ __auto_type pp = &ptr;
+ return *pp;
+}
Index: src/usr.bin/xlint/common/inittyp.c
diff -u src/usr.bin/xlint/common/inittyp.c:1.42 src/usr.bin/xlint/common/inittyp.c:1.43
--- src/usr.bin/xlint/common/inittyp.c:1.42 Sat Jan 20 10:25:57 2024
+++ src/usr.bin/xlint/common/inittyp.c Thu Aug 29 20:35:18 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: inittyp.c,v 1.42 2024/01/20 10:25:57 rillig Exp $ */
+/* $NetBSD: inittyp.c,v 1.43 2024/08/29 20:35:18 rillig Exp $ */
/*
* Copyright (c) 1994, 1995 Jochen Pohl
@@ -37,7 +37,7 @@
#include <sys/cdefs.h>
#if defined(__RCSID)
-__RCSID("$NetBSD: inittyp.c,v 1.42 2024/01/20 10:25:57 rillig Exp $");
+__RCSID("$NetBSD: inittyp.c,v 1.43 2024/08/29 20:35:18 rillig Exp $");
#endif
#if IS_LINT1
@@ -114,6 +114,7 @@ ttab_t ttab[NTSPEC] = {
typeinfo("long double _Complex", LCOMPLEX, LCOMPLEX,
LDOUBLE_SIZE * 2, 3, 'c'),
typeinfo("void", VOID, VOID, 0, 0, ' '),
+ typeinfo("auto", AUTO_TYPE, AUTO_TYPE, 0, 0, ' '),
typeinfo("struct", STRUCT, STRUCT, 0, 0, ' '),
typeinfo("union", UNION, UNION, 0, 0, ' '),
// Will become more complicated in C23, which allows to choose the
Index: src/usr.bin/xlint/common/lint.h
diff -u src/usr.bin/xlint/common/lint.h:1.50 src/usr.bin/xlint/common/lint.h:1.51
--- src/usr.bin/xlint/common/lint.h:1.50 Sun May 12 18:49:35 2024
+++ src/usr.bin/xlint/common/lint.h Thu Aug 29 20:35:18 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: lint.h,v 1.50 2024/05/12 18:49:35 rillig Exp $ */
+/* $NetBSD: lint.h,v 1.51 2024/08/29 20:35:18 rillig Exp $ */
/*
* Copyright (c) 1994, 1995 Jochen Pohl
@@ -87,6 +87,7 @@ typedef enum {
DCOMPLEX, /* double _Complex */
LCOMPLEX, /* long double _Complex */
VOID, /* void */
+ AUTO_TYPE, /* GCC's __auto_type */
STRUCT, /* structure tag */
UNION, /* union tag */
ENUM, /* enum tag */
Index: src/usr.bin/xlint/lint1/cgram.y
diff -u src/usr.bin/xlint/lint1/cgram.y:1.506 src/usr.bin/xlint/lint1/cgram.y:1.507
--- src/usr.bin/xlint/lint1/cgram.y:1.506 Mon Jun 17 22:11:09 2024
+++ src/usr.bin/xlint/lint1/cgram.y Thu Aug 29 20:35:19 2024
@@ -1,5 +1,5 @@
%{
-/* $NetBSD: cgram.y,v 1.506 2024/06/17 22:11:09 rillig Exp $ */
+/* $NetBSD: cgram.y,v 1.507 2024/08/29 20:35:19 rillig Exp $ */
/*
* Copyright (c) 1996 Christopher G. Demetriou. All Rights Reserved.
@@ -35,7 +35,7 @@
#include <sys/cdefs.h>
#if defined(__RCSID)
-__RCSID("$NetBSD: cgram.y,v 1.506 2024/06/17 22:11:09 rillig Exp $");
+__RCSID("$NetBSD: cgram.y,v 1.507 2024/08/29 20:35:19 rillig Exp $");
#endif
#include <limits.h>
@@ -1113,7 +1113,8 @@ type_init_declarator:
begin_initialization($1);
cgram_declare($1, true, $2);
} T_ASSIGN initializer {
- check_size($1);
+ if ($1->s_type->t_tspec != AUTO_TYPE)
+ check_size($1);
end_initialization();
}
;
Index: src/usr.bin/xlint/lint1/emit1.c
diff -u src/usr.bin/xlint/lint1/emit1.c:1.95 src/usr.bin/xlint/lint1/emit1.c:1.96
--- src/usr.bin/xlint/lint1/emit1.c:1.95 Sun May 12 18:49:36 2024
+++ src/usr.bin/xlint/lint1/emit1.c Thu Aug 29 20:35:19 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: emit1.c,v 1.95 2024/05/12 18:49:36 rillig Exp $ */
+/* $NetBSD: emit1.c,v 1.96 2024/08/29 20:35:19 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.95 2024/05/12 18:49:36 rillig Exp $");
+__RCSID("$NetBSD: emit1.c,v 1.96 2024/08/29 20:35:19 rillig Exp $");
#endif
#include <stdlib.h>
@@ -91,11 +91,11 @@ outtype(const type_t *tp)
{
/* Available letters: ------GH--K-MNO--R--U-W-YZ */
#ifdef INT128_SIZE
- static const char tt[NTSPEC] = "???BCCCSSIILLQQJJDDD?XXXVTTTPAF";
- static const char ss[NTSPEC] = "??? su u u u u us l?s l sue ";
+ static const char tt[NTSPEC] = "???BCCCSSIILLQQJJDDD?XXXV?TTTPAF";
+ static const char ss[NTSPEC] = "??? su u u u u us l?s l ?sue ";
#else
- static const char tt[NTSPEC] = "???BCCCSSIILLQQDDD?XXXVTTTPAF";
- static const char ss[NTSPEC] = "??? su u u u us l?s l sue ";
+ static const char tt[NTSPEC] = "???BCCCSSIILLQQDDD?XXXV?TTTPAF";
+ static const char ss[NTSPEC] = "??? su u u u us l?s l ?sue ";
#endif
int na;
tspec_t ts;
Index: src/usr.bin/xlint/lint1/init.c
diff -u src/usr.bin/xlint/lint1/init.c:1.269 src/usr.bin/xlint/lint1/init.c:1.270
--- src/usr.bin/xlint/lint1/init.c:1.269 Thu May 9 20:53:13 2024
+++ src/usr.bin/xlint/lint1/init.c Thu Aug 29 20:35:19 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: init.c,v 1.269 2024/05/09 20:53:13 rillig Exp $ */
+/* $NetBSD: init.c,v 1.270 2024/08/29 20:35:19 rillig Exp $ */
/*
* Copyright (c) 1994, 1995 Jochen Pohl
@@ -38,7 +38,7 @@
#include <sys/cdefs.h>
#if defined(__RCSID)
-__RCSID("$NetBSD: init.c,v 1.269 2024/05/09 20:53:13 rillig Exp $");
+__RCSID("$NetBSD: init.c,v 1.270 2024/08/29 20:35:19 rillig Exp $");
#endif
#include <stdlib.h>
@@ -892,6 +892,8 @@ initialization_expr(initialization *in,
in->in_err = true;
goto done;
}
+ if (in->in_sym->s_type->t_tspec == AUTO_TYPE)
+ in->in_sym->s_type = block_dup_type(tn->tn_type);
if (initialization_expr_using_op(in, tn))
goto done;
if (initialization_init_array_from_string(in, tn))
Index: src/usr.bin/xlint/lint1/lex.c
diff -u src/usr.bin/xlint/lint1/lex.c:1.228 src/usr.bin/xlint/lint1/lex.c:1.229
--- src/usr.bin/xlint/lint1/lex.c:1.228 Sun May 12 18:49:36 2024
+++ src/usr.bin/xlint/lint1/lex.c Thu Aug 29 20:35:19 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: lex.c,v 1.228 2024/05/12 18:49:36 rillig Exp $ */
+/* $NetBSD: lex.c,v 1.229 2024/08/29 20:35:19 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.228 2024/05/12 18:49:36 rillig Exp $");
+__RCSID("$NetBSD: lex.c,v 1.229 2024/08/29 20:35:19 rillig Exp $");
#endif
#include <ctype.h>
@@ -133,6 +133,7 @@ static const struct keyword {
kwdef_token( "alignof", T_ALIGNOF, 78,0,6),
kwdef_token( "asm", T_ASM, 78,1,7),
kwdef_token( "_Atomic", T_ATOMIC, 11,0,1),
+ kwdef("__auto_type", T_TYPE, .u.kw_tspec = AUTO_TYPE, 99,1,1),
kwdef_token( "attribute", T_ATTRIBUTE, 78,1,6),
kwdef_sclass( "auto", AUTO, 78,0,1),
kwdef_type( "_Bool", BOOL, 99),
Index: src/usr.bin/xlint/lint2/emit2.c
diff -u src/usr.bin/xlint/lint2/emit2.c:1.39 src/usr.bin/xlint/lint2/emit2.c:1.40
--- src/usr.bin/xlint/lint2/emit2.c:1.39 Sun May 12 18:49:36 2024
+++ src/usr.bin/xlint/lint2/emit2.c Thu Aug 29 20:35:19 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: emit2.c,v 1.39 2024/05/12 18:49:36 rillig Exp $ */
+/* $NetBSD: emit2.c,v 1.40 2024/08/29 20:35:19 rillig Exp $ */
/*
* Copyright (c) 1996 Christopher G. Demetriou. All Rights Reserved.
@@ -34,7 +34,7 @@
#include <sys/cdefs.h>
#if defined(__RCSID)
-__RCSID("$NetBSD: emit2.c,v 1.39 2024/05/12 18:49:36 rillig Exp $");
+__RCSID("$NetBSD: emit2.c,v 1.40 2024/08/29 20:35:19 rillig Exp $");
#endif
#include "lint2.h"
@@ -49,11 +49,11 @@ static void
outtype(type_t *tp)
{
#ifdef INT128_SIZE
- static const char tt[NTSPEC] = "???BCCCSSIILLQQJJDDD?XXXVTTTPAF";
- static const char ss[NTSPEC] = "??? su u u u u us l?s l sue ";
+ static const char tt[NTSPEC] = "???BCCCSSIILLQQJJDDD?XXXV?TTTPAF";
+ static const char ss[NTSPEC] = "??? su u u u u us l?s l ?sue ";
#else
- static const char tt[NTSPEC] = "???BCCCSSIILLQQDDD?XXXVTTTPAF";
- static const char ss[NTSPEC] = "??? su u u u us l?s l sue ";
+ static const char tt[NTSPEC] = "???BCCCSSIILLQQDDD?XXXV?TTTPAF";
+ static const char ss[NTSPEC] = "??? su u u u us l?s l ?sue ";
#endif
while (tp != NULL) {