Module Name: src Committed By: rillig Date: Sun Mar 31 20:28:45 UTC 2024
Modified Files: src/usr.bin/xlint/lint1: README.md debug.c lint1.h op.h oper.c tree.c Log Message: lint: merge function call operators 'CALL' and 'ICALL' To generate a diff of this commit: cvs rdiff -u -r1.17 -r1.18 src/usr.bin/xlint/lint1/README.md cvs rdiff -u -r1.74 -r1.75 src/usr.bin/xlint/lint1/debug.c cvs rdiff -u -r1.221 -r1.222 src/usr.bin/xlint/lint1/lint1.h cvs rdiff -u -r1.27 -r1.28 src/usr.bin/xlint/lint1/op.h cvs rdiff -u -r1.15 -r1.16 src/usr.bin/xlint/lint1/oper.c cvs rdiff -u -r1.633 -r1.634 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/usr.bin/xlint/lint1/README.md diff -u src/usr.bin/xlint/lint1/README.md:1.17 src/usr.bin/xlint/lint1/README.md:1.18 --- src/usr.bin/xlint/lint1/README.md:1.17 Thu Mar 28 21:04:48 2024 +++ src/usr.bin/xlint/lint1/README.md Sun Mar 31 20:28:45 2024 @@ -1,4 +1,4 @@ -[//]: # ($NetBSD: README.md,v 1.17 2024/03/28 21:04:48 rillig Exp $) +[//]: # ($NetBSD: README.md,v 1.18 2024/03/31 20:28:45 rillig Exp $) # Introduction @@ -115,8 +115,7 @@ Some examples for operators: | NAME | references the identifier in `u.sym` | | UPLUS | the unary operator `+u.ops.left` | | PLUS | the binary operator `u.ops.left + u.ops.right` | -| CALL | a direct function call | -| ICALL | an indirect function call | +| CALL | a function call | | CVT | an implicit conversion or an explicit cast | As an example, the expression `strcmp(names[i], "name")` has this internal Index: src/usr.bin/xlint/lint1/debug.c diff -u src/usr.bin/xlint/lint1/debug.c:1.74 src/usr.bin/xlint/lint1/debug.c:1.75 --- src/usr.bin/xlint/lint1/debug.c:1.74 Tue Mar 19 23:19:03 2024 +++ src/usr.bin/xlint/lint1/debug.c Sun Mar 31 20:28:45 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: debug.c,v 1.74 2024/03/19 23:19:03 rillig Exp $ */ +/* $NetBSD: debug.c,v 1.75 2024/03/31 20:28:45 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.74 2024/03/19 23:19:03 rillig Exp $"); +__RCSID("$NetBSD: debug.c,v 1.75 2024/03/31 20:28:45 rillig Exp $"); #endif #include <stdlib.h> @@ -241,7 +241,6 @@ debug_node(const tnode_t *tn) // NOLINT( debug_printf(", length %zu\n", tn->u.str_literals->len); break; case CALL: - case ICALL: debug_printf("\n"); debug_indent_inc(); @@ -259,8 +258,7 @@ debug_node(const tnode_t *tn) // NOLINT( lint_assert(tn->u.ops.left != NULL); debug_node(tn->u.ops.left); if (op != INCBEF && op != INCAFT - && op != DECBEF && op != DECAFT - && op != CALL && op != ICALL) + && op != DECBEF && op != DECAFT) lint_assert(is_binary(tn) == (tn->u.ops.right != NULL)); if (tn->u.ops.right != NULL) debug_node(tn->u.ops.right); Index: src/usr.bin/xlint/lint1/lint1.h diff -u src/usr.bin/xlint/lint1/lint1.h:1.221 src/usr.bin/xlint/lint1/lint1.h:1.222 --- src/usr.bin/xlint/lint1/lint1.h:1.221 Sat Mar 9 13:54:47 2024 +++ src/usr.bin/xlint/lint1/lint1.h Sun Mar 31 20:28:45 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: lint1.h,v 1.221 2024/03/09 13:54:47 rillig Exp $ */ +/* $NetBSD: lint1.h,v 1.222 2024/03/31 20:28:45 rillig Exp $ */ /* * Copyright (c) 1996 Christopher G. Demetriou. All Rights Reserved. @@ -290,7 +290,7 @@ struct tnode { * wide strings, 'data' is NULL and * 'len' is the number of resulting * characters */ - function_call *call; /* if CALL or ICALL */ + function_call *call; /* if CALL */ } u; }; Index: src/usr.bin/xlint/lint1/op.h diff -u src/usr.bin/xlint/lint1/op.h:1.27 src/usr.bin/xlint/lint1/op.h:1.28 --- src/usr.bin/xlint/lint1/op.h:1.27 Mon Feb 5 23:11:22 2024 +++ src/usr.bin/xlint/lint1/op.h Sun Mar 31 20:28:45 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: op.h,v 1.27 2024/02/05 23:11:22 rillig Exp $ */ +/* $NetBSD: op.h,v 1.28 2024/03/31 20:28:45 rillig Exp $ */ /* * Copyright (c) 1994, 1995 Jochen Pohl @@ -117,7 +117,6 @@ typedef enum { CALL, COMMA, CVT, - ICALL, LOAD, RETURN, REAL, Index: src/usr.bin/xlint/lint1/oper.c diff -u src/usr.bin/xlint/lint1/oper.c:1.15 src/usr.bin/xlint/lint1/oper.c:1.16 --- src/usr.bin/xlint/lint1/oper.c:1.15 Mon Feb 5 23:11:22 2024 +++ src/usr.bin/xlint/lint1/oper.c Sun Mar 31 20:28:45 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: oper.c,v 1.15 2024/02/05 23:11:22 rillig Exp $ */ +/* $NetBSD: oper.c,v 1.16 2024/03/31 20:28:45 rillig Exp $ */ /*- * Copyright (c) 2021 The NetBSD Foundation, Inc. @@ -124,7 +124,6 @@ const mod_t modtab[NOPS] = { {_,_,_,_,_,_,_,_,_,_,_,X,_,_,_,_,_,_,_,_, "call" }, {X,_,X,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,X,X, "," }, {_,_,_,_,_,_,_,_,_,X,_,_,_,_,_,_,_,_,_,X, "convert" }, - {_,_,_,_,_,_,_,_,_,_,_,X,_,_,_,_,_,_,_,_, "icall" }, {_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,X, "load" }, {X,_,X,_,_,_,_,_,_,_,_,X,_,_,_,_,X,_,_,X, "return" }, {_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,X, "real" }, Index: src/usr.bin/xlint/lint1/tree.c diff -u src/usr.bin/xlint/lint1/tree.c:1.633 src/usr.bin/xlint/lint1/tree.c:1.634 --- src/usr.bin/xlint/lint1/tree.c:1.633 Sat Mar 30 19:12:37 2024 +++ src/usr.bin/xlint/lint1/tree.c Sun Mar 31 20:28:45 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: tree.c,v 1.633 2024/03/30 19:12:37 rillig Exp $ */ +/* $NetBSD: tree.c,v 1.634 2024/03/31 20:28:45 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.633 2024/03/30 19:12:37 rillig Exp $"); +__RCSID("$NetBSD: tree.c,v 1.634 2024/03/31 20:28:45 rillig Exp $"); #endif #include <float.h> @@ -1717,8 +1717,7 @@ use(const tnode_t *tn) case CON: case STRING: break; - case CALL: - case ICALL:; + case CALL:; const function_call *call = tn->u.call; for (size_t i = 0, n = call->args_len; i < n; i++) use(call->args[i]); @@ -4280,9 +4279,6 @@ build_function_call(tnode_t *func, bool if (func == NULL) return NULL; - op_t op = func->tn_op == NAME && func->tn_type->t_tspec == FUNC - ? CALL : ICALL; - call->func = func; check_ctype_function_call(call); @@ -4299,7 +4295,7 @@ build_function_call(tnode_t *func, bool check_function_arguments(call); tnode_t *ntn = expr_alloc_tnode(); - ntn->tn_op = op; + ntn->tn_op = CALL; ntn->tn_type = func->tn_type->t_subt->t_subt; ntn->tn_sys = sys; ntn->u.call = call; @@ -4579,13 +4575,16 @@ check_expr_misc(const tnode_t *tn, bool op_t op = tn->tn_op; if (op == NAME || op == CON || op == STRING) return; - if (op == CALL || op == ICALL) { + bool is_direct = op == CALL + && tn->u.call->func->tn_op == ADDR + && tn->u.call->func->u.ops.left->tn_op == NAME; + if (op == CALL) { const function_call *call = tn->u.call; - if (op == CALL) + if (is_direct) check_expr_call(tn, call->func, szof, vctx, cond, retval_discarded); bool discard = op == CVT && tn->tn_type->t_tspec == VOID; - check_expr_misc(call->func, false, false, false, op == CALL, + check_expr_misc(call->func, false, false, false, is_direct, discard, szof); for (size_t i = 0, n = call->args_len; i < n; i++) check_expr_misc(call->args[i], @@ -4615,7 +4614,7 @@ check_expr_misc(const tnode_t *tn, bool if (op == COLON && tn->tn_type->t_tspec == VOID) cvctx = ccond = false; bool discard = op == CVT && tn->tn_type->t_tspec == VOID; - check_expr_misc(ln, cvctx, ccond, eq, op == CALL, discard, szof); + check_expr_misc(ln, cvctx, ccond, eq, is_direct, discard, szof); switch (op) { case LOGAND: