Module Name:    src
Committed By:   rillig
Date:           Sat Jul 15 14:50:47 UTC 2023

Modified Files:
        src/usr.bin/xlint/lint1: tree.c

Log Message:
lint: split struct_or_union_member into separate parts


To generate a diff of this commit:
cvs rdiff -u -r1.569 -r1.570 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/tree.c
diff -u src/usr.bin/xlint/lint1/tree.c:1.569 src/usr.bin/xlint/lint1/tree.c:1.570
--- src/usr.bin/xlint/lint1/tree.c:1.569	Sat Jul 15 13:51:36 2023
+++ src/usr.bin/xlint/lint1/tree.c	Sat Jul 15 14:50:47 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: tree.c,v 1.569 2023/07/15 13:51:36 rillig Exp $	*/
+/*	$NetBSD: tree.c,v 1.570 2023/07/15 14:50:47 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.569 2023/07/15 13:51:36 rillig Exp $");
+__RCSID("$NetBSD: tree.c,v 1.570 2023/07/15 14:50:47 rillig Exp $");
 #endif
 
 #include <float.h>
@@ -1891,6 +1891,31 @@ find_member(const type_t *tp, const char
 }
 
 /*
+ * Remove the member if it was unknown until now, which means
+ * that no defined struct or union has a member with the same name.
+ */
+static void
+remove_unknown_member(tnode_t *tn, sym_t *msym)
+{
+	/* type '%s' does not have member '%s' */
+	error(101, type_name(tn->tn_type), msym->s_name);
+	rmsym(msym);
+	msym->s_kind = FMEMBER;
+	msym->s_scl = STRUCT_MEMBER;
+
+	struct_or_union *sou = expr_zero_alloc(sizeof(*sou),
+	    "struct_or_union");
+	sou->sou_tag = expr_zero_alloc(sizeof(*sou->sou_tag), "sym");
+	sou->sou_tag->s_name = unnamed;
+
+	msym->u.s_member.sm_containing_type = sou;
+	/*
+	 * The member sm_offset_in_bits is not needed here since this
+	 * symbol can only be used for error reporting.
+	 */
+}
+
+/*
  * Returns a symbol which has the same name as the msym argument and is a
  * member of the struct or union specified by the tn argument.
  */
@@ -1898,27 +1923,8 @@ static sym_t *
 struct_or_union_member(tnode_t *tn, op_t op, sym_t *msym)
 {
 
-	/*
-	 * Remove the member if it was unknown until now, which means
-	 * that no defined struct or union has a member with the same name.
-	 */
 	if (msym->s_scl == NOSCL) {
-		/* type '%s' does not have member '%s' */
-		error(101, type_name(tn->tn_type), msym->s_name);
-		rmsym(msym);
-		msym->s_kind = FMEMBER;
-		msym->s_scl = STRUCT_MEMBER;
-
-		struct_or_union *sou = expr_zero_alloc(sizeof(*sou),
-		    "struct_or_union");
-		sou->sou_tag = expr_zero_alloc(sizeof(*sou->sou_tag), "sym");
-		sou->sou_tag->s_name = unnamed;
-
-		msym->u.s_member.sm_containing_type = sou;
-		/*
-		 * The member sm_offset_in_bits is not needed here since this
-		 * symbol can only be used for error reporting.
-		 */
+		remove_unknown_member(tn, msym);
 		return msym;
 	}
 

Reply via email to