Module Name: src Committed By: rillig Date: Sun Jul 4 12:24:39 UTC 2021
Modified Files: src/tests/usr.bin/xlint/lint1: msg_163.c msg_163.exp src/usr.bin/xlint/lint1: tree.c Log Message: lint: remove support for obsolete GCC-style lvalue casts Since GCC 4.0, a cast results in an rvalue. To generate a diff of this commit: cvs rdiff -u -r1.3 -r1.4 src/tests/usr.bin/xlint/lint1/msg_163.c \ src/tests/usr.bin/xlint/lint1/msg_163.exp cvs rdiff -u -r1.306 -r1.307 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/tests/usr.bin/xlint/lint1/msg_163.c diff -u src/tests/usr.bin/xlint/lint1/msg_163.c:1.3 src/tests/usr.bin/xlint/lint1/msg_163.c:1.4 --- src/tests/usr.bin/xlint/lint1/msg_163.c:1.3 Mon Apr 5 01:35:34 2021 +++ src/tests/usr.bin/xlint/lint1/msg_163.c Sun Jul 4 12:24:39 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: msg_163.c,v 1.3 2021/04/05 01:35:34 rillig Exp $ */ +/* $NetBSD: msg_163.c,v 1.4 2021/07/04 12:24:39 rillig Exp $ */ # 3 "msg_163.c" // Test for message: a cast does not yield an lvalue [163] @@ -7,7 +7,21 @@ void example(char *p, int i) { p++; - ((char *)p)++; /* XXX: why is this ok? */ + + /* + * Using a cast as an lvalue had been a GCC extension until 3.4. + * It was removed in GCC 4.0. + * + * https://gcc.gnu.org/onlinedocs/gcc-3.4.6/gcc/Lvalues.html#Lvalues + * https://gcc.gnu.org/onlinedocs/gcc-4.0.4/gcc/index.html#toc_C-Extensions + */ + /* expect+2: error: a cast does not yield an lvalue [163] */ + /* expect+1: error: operand of 'x++' must be lvalue [114] */ + ((char *)p)++; + i++; - ((int)i)++; /* expect: 163 *//* expect: 114 */ + + /* expect+2: error: a cast does not yield an lvalue [163] */ + /* expect+1: error: operand of 'x++' must be lvalue [114] */ + ((int)i)++; } Index: src/tests/usr.bin/xlint/lint1/msg_163.exp diff -u src/tests/usr.bin/xlint/lint1/msg_163.exp:1.3 src/tests/usr.bin/xlint/lint1/msg_163.exp:1.4 --- src/tests/usr.bin/xlint/lint1/msg_163.exp:1.3 Sun Mar 21 20:45:00 2021 +++ src/tests/usr.bin/xlint/lint1/msg_163.exp Sun Jul 4 12:24:39 2021 @@ -1,2 +1,4 @@ -msg_163.c(12): error: a cast does not yield an lvalue [163] -msg_163.c(12): error: operand of 'x++' must be lvalue [114] +msg_163.c(20): error: a cast does not yield an lvalue [163] +msg_163.c(20): error: operand of 'x++' must be lvalue [114] +msg_163.c(26): error: a cast does not yield an lvalue [163] +msg_163.c(26): error: operand of 'x++' must be lvalue [114] Index: src/usr.bin/xlint/lint1/tree.c diff -u src/usr.bin/xlint/lint1/tree.c:1.306 src/usr.bin/xlint/lint1/tree.c:1.307 --- src/usr.bin/xlint/lint1/tree.c:1.306 Sun Jul 4 09:13:59 2021 +++ src/usr.bin/xlint/lint1/tree.c Sun Jul 4 12:24:38 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: tree.c,v 1.306 2021/07/04 09:13:59 rillig Exp $ */ +/* $NetBSD: tree.c,v 1.307 2021/07/04 12:24:38 rillig Exp $ */ /* * Copyright (c) 1994, 1995 Jochen Pohl @@ -37,7 +37,7 @@ #include <sys/cdefs.h> #if defined(__RCSID) && !defined(lint) -__RCSID("$NetBSD: tree.c,v 1.306 2021/07/04 09:13:59 rillig Exp $"); +__RCSID("$NetBSD: tree.c,v 1.307 2021/07/04 12:24:38 rillig Exp $"); #endif #include <float.h> @@ -760,8 +760,6 @@ typeok_incdec(op_t op, const tnode_t *tn if (!tn->tn_lvalue) { if (tn->tn_op == CVT && tn->tn_cast && tn->tn_left->tn_op == LOAD) { - if (tn->tn_type->t_tspec == PTR) - return true; /* a cast does not yield an lvalue */ error(163); }