Module Name: src Committed By: rillig Date: Sun Jul 25 15:48:58 UTC 2021
Modified Files: src/tests/usr.bin/xlint/lint1: parse_type_name.c parse_type_name.exp src/usr.bin/xlint/lint1: cgram.y Log Message: lint: fix parsing of 'typeof(double(typeof(0.0)))' By removing the misplaced grammar rule 'abstract_declarator: T_TYPEOF', the type expression 'typeof(double(typeof(0.0)))' is no longer interpreted as a declarator, but rather as a type specifier, just as in the GCC parser. This resolves 7 shift/reduce conflicts. To generate a diff of this commit: cvs rdiff -u -r1.3 -r1.4 src/tests/usr.bin/xlint/lint1/parse_type_name.c \ src/tests/usr.bin/xlint/lint1/parse_type_name.exp cvs rdiff -u -r1.335 -r1.336 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/tests/usr.bin/xlint/lint1/parse_type_name.c diff -u src/tests/usr.bin/xlint/lint1/parse_type_name.c:1.3 src/tests/usr.bin/xlint/lint1/parse_type_name.c:1.4 --- src/tests/usr.bin/xlint/lint1/parse_type_name.c:1.3 Sun Jul 25 09:53:01 2021 +++ src/tests/usr.bin/xlint/lint1/parse_type_name.c Sun Jul 25 15:48:58 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: parse_type_name.c,v 1.3 2021/07/25 09:53:01 rillig Exp $ */ +/* $NetBSD: parse_type_name.c,v 1.4 2021/07/25 15:48:58 rillig Exp $ */ # 3 "parse_type_name.c" /* @@ -48,6 +48,7 @@ cover_abstract_declarator(void) sink(sizeof(int **[3])); /* cover 'T_TYPEOF cast_expression' */ + /* expect+1: error: cannot take size/alignment of function [144] */ sink(sizeof(int(typeof(12345)))); } Index: src/tests/usr.bin/xlint/lint1/parse_type_name.exp diff -u src/tests/usr.bin/xlint/lint1/parse_type_name.exp:1.3 src/tests/usr.bin/xlint/lint1/parse_type_name.exp:1.4 --- src/tests/usr.bin/xlint/lint1/parse_type_name.exp:1.3 Sun Jul 25 09:53:01 2021 +++ src/tests/usr.bin/xlint/lint1/parse_type_name.exp Sun Jul 25 15:48:58 2021 @@ -1,6 +1,7 @@ -parse_type_name.c(71): error: null dimension [17] -parse_type_name.c(75): error: null dimension [17] -parse_type_name.c(141): error: syntax error 'goto' [249] -parse_type_name.c(143): error: syntax error 'goto' [249] -parse_type_name.c(149): error: syntax error 'goto' [249] -parse_type_name.c(163): warning: ANSI C requires formal parameter before '...' [84] +parse_type_name.c(52): error: cannot take size/alignment of function [144] +parse_type_name.c(72): error: null dimension [17] +parse_type_name.c(76): error: null dimension [17] +parse_type_name.c(142): error: syntax error 'goto' [249] +parse_type_name.c(144): error: syntax error 'goto' [249] +parse_type_name.c(150): error: syntax error 'goto' [249] +parse_type_name.c(164): warning: ANSI C requires formal parameter before '...' [84] Index: src/usr.bin/xlint/lint1/cgram.y diff -u src/usr.bin/xlint/lint1/cgram.y:1.335 src/usr.bin/xlint/lint1/cgram.y:1.336 --- src/usr.bin/xlint/lint1/cgram.y:1.335 Fri Jul 23 15:14:49 2021 +++ src/usr.bin/xlint/lint1/cgram.y Sun Jul 25 15:48:57 2021 @@ -1,5 +1,5 @@ %{ -/* $NetBSD: cgram.y,v 1.335 2021/07/23 15:14:49 rillig Exp $ */ +/* $NetBSD: cgram.y,v 1.336 2021/07/25 15:48:57 rillig Exp $ */ /* * Copyright (c) 1996 Christopher G. Demetriou. All Rights Reserved. @@ -35,7 +35,7 @@ #include <sys/cdefs.h> #if defined(__RCSID) && !defined(lint) -__RCSID("$NetBSD: cgram.y,v 1.335 2021/07/23 15:14:49 rillig Exp $"); +__RCSID("$NetBSD: cgram.y,v 1.336 2021/07/25 15:48:57 rillig Exp $"); #endif #include <limits.h> @@ -124,7 +124,7 @@ anonymize(sym_t *s) %} -%expect 165 +%expect 158 %union { val_t *y_val; @@ -1390,9 +1390,6 @@ abstract_declarator: /* C99 6.7.6 */ | pointer direct_abstract_declarator { $$ = add_pointer($2, $1); } - | T_TYPEOF cast_expression { /* GCC extension */ - $$ = mktempsym($2->tn_type); - } ; direct_abstract_declarator: /* C99 6.7.6 */