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: