Module Name: src
Committed By: rillig
Date: Sat Jul 31 10:09:03 UTC 2021
Modified Files:
src/tests/usr.bin/xlint/lint1: msg_115.c msg_115.exp
Log Message:
tests/lint: demonstrate more wrong warnings for const struct members
The code 't_const = false' occurs 4 times in the lint code, each
corresponding to one of the wrong warnings in the test.
This bug has been existing at least since 2001. Back then, the lint
output was:
2001.12.24.20.52.09
| (23): lint error: popctrl() 1
| (15): syntax error [249]
| (19): warning: left operand of 'FARG' must be modifiable lvalue [115]
| (21): syntax error [249]
| (23): warning: function initialize_const_struct_member falls off bottom
without returning value [217]
| exit status 1
from 2002.12.06.03.27.39
| (23): lint error: func.c, 168: popctrl()
| (15): warning: left operand of '=' must be modifiable lvalue [115]
| (19): warning: left operand of 'FARG' must be modifiable lvalue [115]
| (21): syntax error [249]
| (23): warning: function initialize_const_struct_member falls off bottom
without returning value [217]
| exit status 1
until 2003.10.27.00.12.44
To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 src/tests/usr.bin/xlint/lint1/msg_115.c
cvs rdiff -u -r1.4 -r1.5 src/tests/usr.bin/xlint/lint1/msg_115.exp
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/msg_115.c
diff -u src/tests/usr.bin/xlint/lint1/msg_115.c:1.5 src/tests/usr.bin/xlint/lint1/msg_115.c:1.6
--- src/tests/usr.bin/xlint/lint1/msg_115.c:1.5 Sat Jul 31 09:14:47 2021
+++ src/tests/usr.bin/xlint/lint1/msg_115.c Sat Jul 31 10:09:03 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: msg_115.c,v 1.5 2021/07/31 09:14:47 rillig Exp $ */
+/* $NetBSD: msg_115.c,v 1.6 2021/07/31 10:09:03 rillig Exp $ */
# 3 "msg_115.c"
// Test for message: %soperand of '%s' must be modifiable lvalue [115]
@@ -16,20 +16,35 @@ example(const int *const_ptr)
(*const_ptr)++; /* expect: 115 */
}
-void
+typedef struct {
+ int const member;
+} const_member;
+
+void take_const_member(const_member);
+
+/* see typeok_assign, has_constant_member */
+const_member
initialize_const_struct_member(void)
{
- struct S {
- int const member;
- };
-
/* FIXME: In an initialization, const members can be assigned. */
/* expect+1: warning: left operand of '=' must be modifiable lvalue [115] */
- struct S s1 = (struct S) { 12345 };
- if (s1.member != 0)
- return;
-
- struct S s2 = { 12345 };
- if (s2.member != 0)
- return;
+ const_member cm1 = (const_member) { 12345 };
+ if (cm1.member != 0)
+ /* FIXME: In a function call, const members can be assigned. */
+ /* expect+1: warning: left operand of 'farg' must be modifiable lvalue [115] */
+ take_const_member(cm1);
+
+ struct {
+ const_member member;
+ } cm2 = {
+ /* FIXME: In an initialization, const members can be assigned. */
+ /* expect+1: warning: left operand of 'init' must be modifiable lvalue [115] */
+ cm1,
+ };
+ if (cm2.member.member != 0) {
+ }
+
+ /* FIXME: In a return statement, const members can be assigned. */
+ /* expect+1: warning: left operand of 'return' must be modifiable lvalue [115] */
+ return cm1;
}
Index: src/tests/usr.bin/xlint/lint1/msg_115.exp
diff -u src/tests/usr.bin/xlint/lint1/msg_115.exp:1.4 src/tests/usr.bin/xlint/lint1/msg_115.exp:1.5
--- src/tests/usr.bin/xlint/lint1/msg_115.exp:1.4 Sat Jul 31 09:14:47 2021
+++ src/tests/usr.bin/xlint/lint1/msg_115.exp Sat Jul 31 10:09:03 2021
@@ -5,4 +5,7 @@ msg_115.c(13): warning: left operand of
msg_115.c(14): warning: left operand of '/=' must be modifiable lvalue [115]
msg_115.c(15): warning: left operand of '%=' must be modifiable lvalue [115]
msg_115.c(16): warning: operand of 'x++' must be modifiable lvalue [115]
-msg_115.c(28): warning: left operand of '=' must be modifiable lvalue [115]
+msg_115.c(31): warning: left operand of '=' must be modifiable lvalue [115]
+msg_115.c(35): warning: left operand of 'farg' must be modifiable lvalue [115]
+msg_115.c(42): warning: left operand of 'init' must be modifiable lvalue [115]
+msg_115.c(49): warning: left operand of 'return' must be modifiable lvalue [115]