Module Name:    src
Committed By:   rillig
Date:           Wed Jul 19 22:24:28 UTC 2023

Modified Files:
        src/usr.bin/xlint/lint1: lint1.h

Log Message:
lint: work around a possible compiler error on arm and powerpc


To generate a diff of this commit:
cvs rdiff -u -r1.194 -r1.195 src/usr.bin/xlint/lint1/lint1.h

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/lint1.h
diff -u src/usr.bin/xlint/lint1/lint1.h:1.194 src/usr.bin/xlint/lint1/lint1.h:1.195
--- src/usr.bin/xlint/lint1/lint1.h:1.194	Sat Jul 15 13:35:24 2023
+++ src/usr.bin/xlint/lint1/lint1.h	Wed Jul 19 22:24:28 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: lint1.h,v 1.194 2023/07/15 13:35:24 rillig Exp $ */
+/* $NetBSD: lint1.h,v 1.195 2023/07/19 22:24:28 rillig Exp $ */
 
 /*
  * Copyright (c) 1996 Christopher G. Demetriou.  All Rights Reserved.
@@ -85,11 +85,22 @@ typedef	struct strg {
 	void	*st_mem;	/* char[] for st_char, or wchar_t[] */
 } strg_t;
 
+// TODO: Use bit-fields instead of plain bool, but keep an eye on arm and
+// powerpc, on which GCC 10.5.0 generates code that leads to extra 327
+// warnings, even in msg_327.c, which does not contain any type qualifier at
+// all.  A possible starting point for continuing the investigation is that
+// type_qualifiers is a very small struct that contains only bool bit-fields,
+// and this struct is a member of the parser's union.
+//
+// Instead of using plain bool instead of bit-fields, an alternative workaround
+// is to compile cgram.c with -Os or -O1 instead of -O2.  The generated code
+// between -Os and -O2 differs too much though to give a hint at the root
+// cause.
 typedef struct {
-	bool tq_const:1;
-	bool tq_restrict:1;
-	bool tq_volatile:1;
-	bool tq_atomic:1;
+	bool tq_const;
+	bool tq_restrict;
+	bool tq_volatile;
+	bool tq_atomic;
 } type_qualifiers;
 
 /* A bool, integer or floating-point value. */

Reply via email to