Module Name:    src
Committed By:   rillig
Date:           Fri Apr  1 23:16:32 UTC 2022

Modified Files:
        src/tests/usr.bin/xlint/lint1: decl_direct_abstract.c
            decl_direct_abstract.exp msg_012.c msg_012.exp msg_014.c
            msg_014.exp msg_144.c msg_144.exp parse_type_name.c
            parse_type_name.exp
        src/usr.bin/xlint/lint1: err.c tree.c

Log Message:
lint: add type details to message about 'sizeof(function)'

The code in add_function is severely broken, it mixes up the return type
of the function with the argument types.  For now, at least show the
guessed type in the diagnostic, to allow human readers quickly spot the
bug.

Extend the test cases in decl_direct_abstract.c to show that the
behavior differs unreasonably if the first parameter of the function is
equal to its return type.


To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 src/tests/usr.bin/xlint/lint1/decl_direct_abstract.c
cvs rdiff -u -r1.4 -r1.5 \
    src/tests/usr.bin/xlint/lint1/decl_direct_abstract.exp \
    src/tests/usr.bin/xlint/lint1/msg_144.c
cvs rdiff -u -r1.3 -r1.4 src/tests/usr.bin/xlint/lint1/msg_012.c \
    src/tests/usr.bin/xlint/lint1/msg_012.exp \
    src/tests/usr.bin/xlint/lint1/msg_014.c \
    src/tests/usr.bin/xlint/lint1/msg_014.exp \
    src/tests/usr.bin/xlint/lint1/msg_144.exp
cvs rdiff -u -r1.7 -r1.8 src/tests/usr.bin/xlint/lint1/parse_type_name.c
cvs rdiff -u -r1.6 -r1.7 src/tests/usr.bin/xlint/lint1/parse_type_name.exp
cvs rdiff -u -r1.154 -r1.155 src/usr.bin/xlint/lint1/err.c
cvs rdiff -u -r1.413 -r1.414 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/decl_direct_abstract.c
diff -u src/tests/usr.bin/xlint/lint1/decl_direct_abstract.c:1.5 src/tests/usr.bin/xlint/lint1/decl_direct_abstract.c:1.6
--- src/tests/usr.bin/xlint/lint1/decl_direct_abstract.c:1.5	Fri Apr  1 22:28:21 2022
+++ src/tests/usr.bin/xlint/lint1/decl_direct_abstract.c	Fri Apr  1 23:16:32 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: decl_direct_abstract.c,v 1.5 2022/04/01 22:28:21 rillig Exp $	*/
+/*	$NetBSD: decl_direct_abstract.c,v 1.6 2022/04/01 23:16:32 rillig Exp $	*/
 # 3 "decl_direct_abstract.c"
 
 /*
@@ -77,12 +77,119 @@ void int_array_3_array(int[3][7]);
 /* supported since cgram.y 1.363 from 2021-09-14 */
 void int_array_ast_array(int[*][7]);
 
-/* expect+1: error: cannot take size/alignment of function [144] */
+/* expect+1: error: cannot take size/alignment of function type 'function() returning int' [144] */
 unsigned long size_unspecified_args = sizeof(int());
 /* FIXME: Must be 'of function', not 'of void'. */
 /* expect+1: error: cannot take size/alignment of void [146] */
 unsigned long size_prototype_void = sizeof(int(void));
-/* TODO: error: cannot take size/alignment of function [144] */
+/* TODO: error: cannot take size/alignment of function type 'function(double) returning int' [144] */
 unsigned long size_prototype_unnamed = sizeof(int(double));
-/* TODO: error: cannot take size/alignment of function [144] */
+/* TODO: error: cannot take size/alignment of function type 'function(double) returning int' [144] */
 unsigned long size_prototype_named = sizeof(int(double dbl));
+
+/* expect+2: error: cannot take size/alignment of function type 'function() returning int' [144] */
+/* expect+1: error: negative array dimension (-1000) [20] */
+int size_unspecified_args_return_int[-1000 - (int)sizeof(int())];
+
+/* expect+2: error: cannot take size/alignment of function type 'function() returning char' [144] */
+/* expect+1: error: negative array dimension (-1000) [20] */
+int size_unspecified_args_return_char[-1000 - (int)sizeof(char())];
+
+/* FIXME: 'of void' must be 'of function'. */
+/* expect+2: error: cannot take size/alignment of void [146] */
+/* expect+1: error: negative array dimension (-1000) [20] */
+int size_prototype_void_return_int[-1000 - (int)sizeof(int(void))];
+
+/* FIXME: 'of void' must be 'of function'. */
+/* expect+2: error: cannot take size/alignment of void [146] */
+/* expect+1: error: negative array dimension (-1000) [20] */
+int size_prototype_void_return_double[-1000 - (int)sizeof(double(void))];
+
+/* expect+1: error: negative array dimension (-1008) [20] */
+int size_prototype_unnamed_return_int[-1000 - (int)sizeof(int(double))];
+
+/* expect+1: error: negative array dimension (-1008) [20] */
+int size_prototype_unnamed_return_pchar[-1000 - (int)sizeof(char *(double))];
+
+/* expect+1: error: negative array dimension (-1008) [20] */
+int size_prototype_named_return_int[-1000 - (int)sizeof(int(double dbl))];
+
+/* expect+1: error: negative array dimension (-1008) [20] */
+int size_prototype_named_return_pppchar[-1000 - (int)sizeof(char ***(double dbl))];
+
+
+typedef struct {
+	char a[1];
+} a01;
+
+typedef struct {
+	char a[4];
+} a04;
+
+typedef struct {
+	char a[8];
+} a08;
+
+typedef struct {
+	char a[32];
+} a32;
+
+/* expect+2: error: cannot take size/alignment of function type 'function() returning struct typedef a01' [144] */
+/* expect+1: error: negative array dimension (-1000) [20] */
+int unspecified_args_return_01[-1000 - (int)sizeof(a01())];
+/* expect+2: error: cannot take size/alignment of function type 'function() returning struct typedef a04' [144] */
+/* expect+1: error: negative array dimension (-1000) [20] */
+int unspecified_args_return_04[-1000 - (int)sizeof(a04())];
+/* expect+2: error: cannot take size/alignment of function type 'function() returning struct typedef a08' [144] */
+/* expect+1: error: negative array dimension (-1000) [20] */
+int unspecified_args_return_08[-1000 - (int)sizeof(a08())];
+/* expect+2: error: cannot take size/alignment of function type 'function() returning struct typedef a32' [144] */
+/* expect+1: error: negative array dimension (-1000) [20] */
+int unspecified_args_return_32[-1000 - (int)sizeof(a32())];
+
+/* expect+2: error: cannot take size/alignment of void [146] */
+/* expect+1: error: negative array dimension (-1000) [20] */
+int prototype_void_return_01[-1000 - (int)sizeof(a01(void))];
+/* expect+2: error: cannot take size/alignment of void [146] */
+/* expect+1: error: negative array dimension (-1000) [20] */
+int prototype_void_return_04[-1000 - (int)sizeof(a04(void))];
+/* expect+2: error: cannot take size/alignment of void [146] */
+/* expect+1: error: negative array dimension (-1000) [20] */
+int prototype_void_return_08[-1000 - (int)sizeof(a08(void))];
+/* expect+2: error: cannot take size/alignment of void [146] */
+/* expect+1: error: negative array dimension (-1000) [20] */
+int prototype_void_return_32[-1000 - (int)sizeof(a32(void))];
+
+/* expect+1: error: negative array dimension (-1001) [20] */
+int prototype_unnamed_01_return_32[-1000 - (int)sizeof(a32(a01))];
+/* expect+1: error: negative array dimension (-1004) [20] */
+int prototype_unnamed_04_return_32[-1000 - (int)sizeof(a32(a04))];
+/* expect+1: error: negative array dimension (-1008) [20] */
+int prototype_unnamed_08_return_32[-1000 - (int)sizeof(a32(a08))];
+/* expect+2: error: cannot take size/alignment of function type 'function(struct typedef a32) returning struct typedef a32' [144] */
+/* expect+1: error: negative array dimension (-1000) [20] */
+int prototype_unnamed_32_return_32[-1000 - (int)sizeof(a32(a32))];
+
+/* expect+1: error: negative array dimension (-1032) [20] */
+int prototype_unnamed_32_return_01[-1000 - (int)sizeof(a01(a32))];
+/* expect+1: error: negative array dimension (-1032) [20] */
+int prototype_unnamed_32_return_04[-1000 - (int)sizeof(a04(a32))];
+/* expect+1: error: negative array dimension (-1032) [20] */
+int prototype_unnamed_32_return_08[-1000 - (int)sizeof(a08(a32))];
+
+/* expect+1: error: negative array dimension (-1001) [20] */
+int prototype_named_01_return_32[-1000 - (int)sizeof(a32(a01 arg))];
+/* expect+1: error: negative array dimension (-1004) [20] */
+int prototype_named_04_return_32[-1000 - (int)sizeof(a32(a04 arg))];
+/* expect+1: error: negative array dimension (-1008) [20] */
+int prototype_named_08_return_32[-1000 - (int)sizeof(a32(a08 arg))];
+/* expect+2: error: cannot take size/alignment of function type 'function(struct typedef a32) returning struct typedef a32' [144] */
+/* expect+1: error: negative array dimension (-1000) [20] */
+int prototype_named_32_return_32[-1000 - (int)sizeof(a32(a32 arg))];
+
+/* expect+1: error: negative array dimension (-1032) [20] */
+int prototype_named_32_return_01[-1000 - (int)sizeof(a01(a32 arg))];
+/* expect+1: error: negative array dimension (-1032) [20] */
+int prototype_named_32_return_04[-1000 - (int)sizeof(a04(a32 arg))];
+/* expect+1: error: negative array dimension (-1032) [20] */
+int prototype_named_32_return_08[-1000 - (int)sizeof(a08(a32 arg))];

Index: src/tests/usr.bin/xlint/lint1/decl_direct_abstract.exp
diff -u src/tests/usr.bin/xlint/lint1/decl_direct_abstract.exp:1.4 src/tests/usr.bin/xlint/lint1/decl_direct_abstract.exp:1.5
--- src/tests/usr.bin/xlint/lint1/decl_direct_abstract.exp:1.4	Fri Apr  1 22:28:21 2022
+++ src/tests/usr.bin/xlint/lint1/decl_direct_abstract.exp	Fri Apr  1 23:16:32 2022
@@ -10,5 +10,49 @@ decl_direct_abstract.c(61): error: canno
 decl_direct_abstract.c(63): error: cannot initialize 'double' from 'pointer to function(pointer to const pointer to function(unsigned int, ...) returning int) returning void' [185]
 decl_direct_abstract.c(70): error: null dimension [17]
 decl_direct_abstract.c(73): error: null dimension [17]
-decl_direct_abstract.c(81): error: cannot take size/alignment of function [144]
+decl_direct_abstract.c(81): error: cannot take size/alignment of function type 'function() returning int' [144]
 decl_direct_abstract.c(84): error: cannot take size/alignment of void [146]
+decl_direct_abstract.c(92): error: cannot take size/alignment of function type 'function() returning int' [144]
+decl_direct_abstract.c(92): error: negative array dimension (-1000) [20]
+decl_direct_abstract.c(96): error: cannot take size/alignment of function type 'function() returning char' [144]
+decl_direct_abstract.c(96): error: negative array dimension (-1000) [20]
+decl_direct_abstract.c(101): error: cannot take size/alignment of void [146]
+decl_direct_abstract.c(101): error: negative array dimension (-1000) [20]
+decl_direct_abstract.c(106): error: cannot take size/alignment of void [146]
+decl_direct_abstract.c(106): error: negative array dimension (-1000) [20]
+decl_direct_abstract.c(109): error: negative array dimension (-1008) [20]
+decl_direct_abstract.c(112): error: negative array dimension (-1008) [20]
+decl_direct_abstract.c(115): error: negative array dimension (-1008) [20]
+decl_direct_abstract.c(118): error: negative array dimension (-1008) [20]
+decl_direct_abstract.c(139): error: cannot take size/alignment of function type 'function() returning struct typedef a01' [144]
+decl_direct_abstract.c(139): error: negative array dimension (-1000) [20]
+decl_direct_abstract.c(142): error: cannot take size/alignment of function type 'function() returning struct typedef a04' [144]
+decl_direct_abstract.c(142): error: negative array dimension (-1000) [20]
+decl_direct_abstract.c(145): error: cannot take size/alignment of function type 'function() returning struct typedef a08' [144]
+decl_direct_abstract.c(145): error: negative array dimension (-1000) [20]
+decl_direct_abstract.c(148): error: cannot take size/alignment of function type 'function() returning struct typedef a32' [144]
+decl_direct_abstract.c(148): error: negative array dimension (-1000) [20]
+decl_direct_abstract.c(152): error: cannot take size/alignment of void [146]
+decl_direct_abstract.c(152): error: negative array dimension (-1000) [20]
+decl_direct_abstract.c(155): error: cannot take size/alignment of void [146]
+decl_direct_abstract.c(155): error: negative array dimension (-1000) [20]
+decl_direct_abstract.c(158): error: cannot take size/alignment of void [146]
+decl_direct_abstract.c(158): error: negative array dimension (-1000) [20]
+decl_direct_abstract.c(161): error: cannot take size/alignment of void [146]
+decl_direct_abstract.c(161): error: negative array dimension (-1000) [20]
+decl_direct_abstract.c(164): error: negative array dimension (-1001) [20]
+decl_direct_abstract.c(166): error: negative array dimension (-1004) [20]
+decl_direct_abstract.c(168): error: negative array dimension (-1008) [20]
+decl_direct_abstract.c(171): error: cannot take size/alignment of function type 'function(struct typedef a32) returning struct typedef a32' [144]
+decl_direct_abstract.c(171): error: negative array dimension (-1000) [20]
+decl_direct_abstract.c(174): error: negative array dimension (-1032) [20]
+decl_direct_abstract.c(176): error: negative array dimension (-1032) [20]
+decl_direct_abstract.c(178): error: negative array dimension (-1032) [20]
+decl_direct_abstract.c(181): error: negative array dimension (-1001) [20]
+decl_direct_abstract.c(183): error: negative array dimension (-1004) [20]
+decl_direct_abstract.c(185): error: negative array dimension (-1008) [20]
+decl_direct_abstract.c(188): error: cannot take size/alignment of function type 'function(struct typedef a32) returning struct typedef a32' [144]
+decl_direct_abstract.c(188): error: negative array dimension (-1000) [20]
+decl_direct_abstract.c(191): error: negative array dimension (-1032) [20]
+decl_direct_abstract.c(193): error: negative array dimension (-1032) [20]
+decl_direct_abstract.c(195): error: negative array dimension (-1032) [20]
Index: src/tests/usr.bin/xlint/lint1/msg_144.c
diff -u src/tests/usr.bin/xlint/lint1/msg_144.c:1.4 src/tests/usr.bin/xlint/lint1/msg_144.c:1.5
--- src/tests/usr.bin/xlint/lint1/msg_144.c:1.4	Fri Apr  2 12:16:50 2021
+++ src/tests/usr.bin/xlint/lint1/msg_144.c	Fri Apr  1 23:16:32 2022
@@ -1,10 +1,11 @@
-/*	$NetBSD: msg_144.c,v 1.4 2021/04/02 12:16:50 rillig Exp $	*/
+/*	$NetBSD: msg_144.c,v 1.5 2022/04/01 23:16:32 rillig Exp $	*/
 # 3 "msg_144.c"
 
-// Test for message: cannot take size/alignment of function [144]
+// Test for message: cannot take size/alignment of function type '%s' [144]
 
 unsigned long
 example(void)
 {
-	return sizeof(example);	/* expect: 144 */
+	/* expect+1: error: cannot take size/alignment of function type 'function(void) returning unsigned long' [144] */
+	return sizeof(example);
 }

Index: src/tests/usr.bin/xlint/lint1/msg_012.c
diff -u src/tests/usr.bin/xlint/lint1/msg_012.c:1.3 src/tests/usr.bin/xlint/lint1/msg_012.c:1.4
--- src/tests/usr.bin/xlint/lint1/msg_012.c:1.3	Thu Aug 26 19:23:25 2021
+++ src/tests/usr.bin/xlint/lint1/msg_012.c	Fri Apr  1 23:16:32 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: msg_012.c,v 1.3 2021/08/26 19:23:25 rillig Exp $	*/
+/*	$NetBSD: msg_012.c,v 1.4 2022/04/01 23:16:32 rillig Exp $	*/
 # 3 "msg_012.c"
 
 // Test for message: compiler takes size of function [12]
@@ -7,6 +7,6 @@
 unsigned long
 example(void)
 {
-	/* expect+1: error: cannot take size/alignment of function [144] */
+	/* expect+1: error: cannot take size/alignment of function type 'function(void) returning unsigned long' [144] */
 	return sizeof(example);
 }
Index: src/tests/usr.bin/xlint/lint1/msg_012.exp
diff -u src/tests/usr.bin/xlint/lint1/msg_012.exp:1.3 src/tests/usr.bin/xlint/lint1/msg_012.exp:1.4
--- src/tests/usr.bin/xlint/lint1/msg_012.exp:1.3	Thu Aug 26 19:23:25 2021
+++ src/tests/usr.bin/xlint/lint1/msg_012.exp	Fri Apr  1 23:16:32 2022
@@ -1 +1 @@
-msg_012.c(11): error: cannot take size/alignment of function [144]
+msg_012.c(11): error: cannot take size/alignment of function type 'function(void) returning unsigned long' [144]
Index: src/tests/usr.bin/xlint/lint1/msg_014.c
diff -u src/tests/usr.bin/xlint/lint1/msg_014.c:1.3 src/tests/usr.bin/xlint/lint1/msg_014.c:1.4
--- src/tests/usr.bin/xlint/lint1/msg_014.c:1.3	Thu Aug 26 19:23:25 2021
+++ src/tests/usr.bin/xlint/lint1/msg_014.c	Fri Apr  1 23:16:32 2022
@@ -1,11 +1,11 @@
-/*	$NetBSD: msg_014.c,v 1.3 2021/08/26 19:23:25 rillig Exp $	*/
+/*	$NetBSD: msg_014.c,v 1.4 2022/04/01 23:16:32 rillig Exp $	*/
 # 3 "msg_014.c"
 
 // Test for message: compiler takes alignment of function [14]
 
 typedef void function(void);
 
-/* expect+1: error: cannot take size/alignment of function [144] */
+/* expect+1: error: cannot take size/alignment of function type 'function(void) returning void' [144] */
 unsigned long alignof_function = __alignof__(function);
 
 TODO: "Add example code that triggers the above message." /* expect: 249 */
Index: src/tests/usr.bin/xlint/lint1/msg_014.exp
diff -u src/tests/usr.bin/xlint/lint1/msg_014.exp:1.3 src/tests/usr.bin/xlint/lint1/msg_014.exp:1.4
--- src/tests/usr.bin/xlint/lint1/msg_014.exp:1.3	Thu Aug 26 19:23:25 2021
+++ src/tests/usr.bin/xlint/lint1/msg_014.exp	Fri Apr  1 23:16:32 2022
@@ -1,2 +1,2 @@
-msg_014.c(9): error: cannot take size/alignment of function [144]
+msg_014.c(9): error: cannot take size/alignment of function type 'function(void) returning void' [144]
 msg_014.c(11): error: syntax error ':' [249]
Index: src/tests/usr.bin/xlint/lint1/msg_144.exp
diff -u src/tests/usr.bin/xlint/lint1/msg_144.exp:1.3 src/tests/usr.bin/xlint/lint1/msg_144.exp:1.4
--- src/tests/usr.bin/xlint/lint1/msg_144.exp:1.3	Sun Mar 21 20:44:59 2021
+++ src/tests/usr.bin/xlint/lint1/msg_144.exp	Fri Apr  1 23:16:32 2022
@@ -1 +1 @@
-msg_144.c(9): error: cannot take size/alignment of function [144]
+msg_144.c(10): error: cannot take size/alignment of function type 'function(void) returning unsigned long' [144]

Index: src/tests/usr.bin/xlint/lint1/parse_type_name.c
diff -u src/tests/usr.bin/xlint/lint1/parse_type_name.c:1.7 src/tests/usr.bin/xlint/lint1/parse_type_name.c:1.8
--- src/tests/usr.bin/xlint/lint1/parse_type_name.c:1.7	Sun Jul 25 22:03:42 2021
+++ src/tests/usr.bin/xlint/lint1/parse_type_name.c	Fri Apr  1 23:16:32 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: parse_type_name.c,v 1.7 2021/07/25 22:03:42 rillig Exp $	*/
+/*	$NetBSD: parse_type_name.c,v 1.8 2022/04/01 23:16:32 rillig Exp $	*/
 # 3 "parse_type_name.c"
 
 /*
@@ -48,7 +48,7 @@ cover_abstract_declarator(void)
 	sink(sizeof(int **[3]));
 
 	/* cover 'T_TYPEOF cast_expression' */
-	/* expect+1: error: cannot take size/alignment of function [144] */
+	/* expect+1: error: cannot take size/alignment of function type 'function(int) returning int' [144] */
 	sink(sizeof(int(typeof(12345))));
 }
 

Index: src/tests/usr.bin/xlint/lint1/parse_type_name.exp
diff -u src/tests/usr.bin/xlint/lint1/parse_type_name.exp:1.6 src/tests/usr.bin/xlint/lint1/parse_type_name.exp:1.7
--- src/tests/usr.bin/xlint/lint1/parse_type_name.exp:1.6	Sun Jul 25 19:41:33 2021
+++ src/tests/usr.bin/xlint/lint1/parse_type_name.exp	Fri Apr  1 23:16:32 2022
@@ -1,4 +1,4 @@
-parse_type_name.c(52): error: cannot take size/alignment of function [144]
+parse_type_name.c(52): error: cannot take size/alignment of function type 'function(int) returning int' [144]
 parse_type_name.c(72): error: null dimension [17]
 parse_type_name.c(76): error: null dimension [17]
 parse_type_name.c(118): error: syntax error 'goto' [249]

Index: src/usr.bin/xlint/lint1/err.c
diff -u src/usr.bin/xlint/lint1/err.c:1.154 src/usr.bin/xlint/lint1/err.c:1.155
--- src/usr.bin/xlint/lint1/err.c:1.154	Fri Apr  1 22:07:23 2022
+++ src/usr.bin/xlint/lint1/err.c	Fri Apr  1 23:16:31 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: err.c,v 1.154 2022/04/01 22:07:23 rillig Exp $	*/
+/*	$NetBSD: err.c,v 1.155 2022/04/01 23:16:31 rillig 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.154 2022/04/01 22:07:23 rillig Exp $");
+__RCSID("$NetBSD: err.c,v 1.155 2022/04/01 23:16:31 rillig Exp $");
 #endif
 
 #include <sys/types.h>
@@ -198,7 +198,7 @@ const char *const msgs[] = {
 	"integer overflow detected, op '%s'",			      /* 141 */
 	"floating point overflow detected, op %s",		      /* 142 */
 	"cannot take size/alignment of incomplete type",	      /* 143 */
-	"cannot take size/alignment of function",		      /* 144 */
+	"cannot take size/alignment of function type '%s'",	      /* 144 */
 	"cannot take size/alignment of bit-field",		      /* 145 */
 	"cannot take size/alignment of void",			      /* 146 */
 	"invalid cast from '%s' to '%s'",			      /* 147 */

Index: src/usr.bin/xlint/lint1/tree.c
diff -u src/usr.bin/xlint/lint1/tree.c:1.413 src/usr.bin/xlint/lint1/tree.c:1.414
--- src/usr.bin/xlint/lint1/tree.c:1.413	Fri Apr  1 22:28:21 2022
+++ src/usr.bin/xlint/lint1/tree.c	Fri Apr  1 23:16:32 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: tree.c,v 1.413 2022/04/01 22:28:21 rillig Exp $	*/
+/*	$NetBSD: tree.c,v 1.414 2022/04/01 23:16:32 rillig 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.413 2022/04/01 22:28:21 rillig Exp $");
+__RCSID("$NetBSD: tree.c,v 1.414 2022/04/01 23:16:32 rillig Exp $");
 #endif
 
 #include <float.h>
@@ -3488,8 +3488,8 @@ type_size_in_bits(const type_t *tp)
 	}
 	switch (tp->t_tspec) {
 	case FUNC:
-		/* cannot take size/alignment of function */
-		error(144);
+		/* cannot take size/alignment of function type '%s' */
+		error(144, type_name(tp));
 		elsz = 1;
 		break;
 	case STRUCT:
@@ -3535,8 +3535,8 @@ build_alignof(const type_t *tp)
 		break;
 
 	case FUNC:
-		/* cannot take size/alignment of function */
-		error(144);
+		/* cannot take size/alignment of function type '%s' */
+		error(144, type_name(tp));
 		return 0;
 
 	case STRUCT:

Reply via email to