Module Name: src Committed By: rillig Date: Sat Jul 15 14:54:31 UTC 2023
Modified Files: src/tests/usr.bin/xlint/lint1: gcc_statement_expression.c src/usr.bin/xlint/lint1: tree.c Log Message: lint: fix member lookup after GCC statement expression To generate a diff of this commit: cvs rdiff -u -r1.2 -r1.3 \ src/tests/usr.bin/xlint/lint1/gcc_statement_expression.c cvs rdiff -u -r1.570 -r1.571 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/gcc_statement_expression.c diff -u src/tests/usr.bin/xlint/lint1/gcc_statement_expression.c:1.2 src/tests/usr.bin/xlint/lint1/gcc_statement_expression.c:1.3 --- src/tests/usr.bin/xlint/lint1/gcc_statement_expression.c:1.2 Sat Jul 15 13:51:36 2023 +++ src/tests/usr.bin/xlint/lint1/gcc_statement_expression.c Sat Jul 15 14:54:31 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: gcc_statement_expression.c,v 1.2 2023/07/15 13:51:36 rillig Exp $ */ +/* $NetBSD: gcc_statement_expression.c,v 1.3 2023/07/15 14:54:31 rillig Exp $ */ # 3 "gcc_statement_expression.c" /* @@ -21,12 +21,6 @@ use_inner_type_from_outside(void) } outer = { { 3 } }; outer; }).inner.member; - /* expect-1: error: type 'struct outer' does not have member 'inner' [101] */ - /* expect-2: error: type 'int' does not have member 'member' [101] */ - /* - * FIXME: The above types must not be removed from the symbol table - * yet; at least, their member names must still be known. - */ return x; } Index: src/usr.bin/xlint/lint1/tree.c diff -u src/usr.bin/xlint/lint1/tree.c:1.570 src/usr.bin/xlint/lint1/tree.c:1.571 --- src/usr.bin/xlint/lint1/tree.c:1.570 Sat Jul 15 14:50:47 2023 +++ src/usr.bin/xlint/lint1/tree.c Sat Jul 15 14:54:31 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: tree.c,v 1.570 2023/07/15 14:50:47 rillig Exp $ */ +/* $NetBSD: tree.c,v 1.571 2023/07/15 14:54:31 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.570 2023/07/15 14:50:47 rillig Exp $"); +__RCSID("$NetBSD: tree.c,v 1.571 2023/07/15 14:54:31 rillig Exp $"); #endif #include <float.h> @@ -1923,11 +1923,6 @@ static sym_t * struct_or_union_member(tnode_t *tn, op_t op, sym_t *msym) { - if (msym->s_scl == NOSCL) { - remove_unknown_member(tn, msym); - return msym; - } - /* Determine the tag type of which msym is expected to be a member. */ const type_t *tp = NULL; if (op == POINT && is_struct_or_union(tn->tn_type->t_tspec)) @@ -1956,6 +1951,11 @@ struct_or_union_member(tnode_t *tn, op_t return nested_mem; } + if (msym->s_scl == NOSCL) { + remove_unknown_member(tn, msym); + return msym; + } + bool eq = all_members_compatible(msym); /*