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