Module Name:    src
Committed By:   rillig
Date:           Thu May 26 12:47:20 UTC 2022

Modified Files:
        src/usr.bin/xlint/lint1: cgram.y

Log Message:
lint: merge debug and non-debug code for saving and restoring warnings

No functional change.


To generate a diff of this commit:
cvs rdiff -u -r1.417 -r1.418 src/usr.bin/xlint/lint1/cgram.y

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/cgram.y
diff -u src/usr.bin/xlint/lint1/cgram.y:1.417 src/usr.bin/xlint/lint1/cgram.y:1.418
--- src/usr.bin/xlint/lint1/cgram.y:1.417	Thu May 26 12:27:25 2022
+++ src/usr.bin/xlint/lint1/cgram.y	Thu May 26 12:47:20 2022
@@ -1,5 +1,5 @@
 %{
-/* $NetBSD: cgram.y,v 1.417 2022/05/26 12:27:25 rillig Exp $ */
+/* $NetBSD: cgram.y,v 1.418 2022/05/26 12:47:20 rillig Exp $ */
 
 /*
  * Copyright (c) 1996 Christopher G. Demetriou.  All Rights Reserved.
@@ -35,7 +35,7 @@
 
 #include <sys/cdefs.h>
 #if defined(__RCSID)
-__RCSID("$NetBSD: cgram.y,v 1.417 2022/05/26 12:27:25 rillig Exp $");
+__RCSID("$NetBSD: cgram.y,v 1.418 2022/05/26 12:47:20 rillig Exp $");
 #endif
 
 #include <limits.h>
@@ -71,48 +71,52 @@ static	void	read_until_rparen(void);
 static	sym_t	*symbolrename(sym_t *, sbuf_t *);
 
 
-#ifdef DEBUG
+/* ARGSUSED */
 static void
-CLEAR_WARN_FLAGS(const char *file, size_t line)
+clear_warning_flags_loc(const char *file, size_t line)
 {
 	debug_step("%s:%zu: clearing flags", file, line);
 	clear_warn_flags();
 	olwarn = LWARN_BAD;
 }
 
+/* ARGSUSED */
 static void
-SAVE_WARN_FLAGS(const char *file, size_t line)
+save_warning_flags_loc(const char *file, size_t line)
 {
 	/*
 	 * There used to be an assertion for 'olwarn == LWARN_BAD' here,
 	 * but that triggered for the following code:
 	 *
 	 * void function(int x) { if (x > 0) if (x > 1) return; }
+	 *
+	 * It didn't trigger if the inner 'if' was enclosed in braces though.
+	 *
+	 * TODO: If actually needed, add support for nested suppression of
+	 *  warnings.
 	 */
 	debug_step("%s:%zu: saving flags %d", file, line, lwarn);
 	olwarn = lwarn;
 }
 
+/* ARGSUSED */
 static void
-RESTORE_WARN_FLAGS(const char *file, size_t line)
+restore_warning_flags_loc(const char *file, size_t line)
 {
 	if (olwarn != LWARN_BAD) {
 		lwarn = olwarn;
 		debug_step("%s:%zu: restoring flags %d", file, line, lwarn);
-		olwarn = LWARN_BAD;
+		/*
+		 * Do not set 'olwarn = LWARN_BAD' here, to avoid triggering
+		 * the assertion in save_warning_flags_loc.
+		 */
 	} else
-		CLEAR_WARN_FLAGS(file, line);
+		clear_warning_flags_loc(file, line);
 }
-#else
-#define CLEAR_WARN_FLAGS(f, l)	clear_warn_flags(), olwarn = LWARN_BAD
-#define SAVE_WARN_FLAGS(f, l)	olwarn = lwarn
-#define RESTORE_WARN_FLAGS(f, l) \
-	(void)(olwarn == LWARN_BAD ? (clear_warn_flags(), 0) : (lwarn = olwarn))
-#endif
 
-#define clear_warning_flags()	CLEAR_WARN_FLAGS(__FILE__, __LINE__)
-#define save_warning_flags()	SAVE_WARN_FLAGS(__FILE__, __LINE__)
-#define restore_warning_flags()	RESTORE_WARN_FLAGS(__FILE__, __LINE__)
+#define clear_warning_flags()	clear_warning_flags_loc(__FILE__, __LINE__)
+#define save_warning_flags()	save_warning_flags_loc(__FILE__, __LINE__)
+#define restore_warning_flags()	restore_warning_flags_loc(__FILE__, __LINE__)
 
 /* unbind the anonymous struct members from the struct */
 static void

Reply via email to