🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: gnu.gcc.bug
Article #221

GCC 2.2.2 doesn't warn about obsolescent use of storage class

#221
From: Paul Eggert
Date: Sat, 01 Aug 1992 04:00
119 lines
4174 bytes
GCC 2.2.2 doesn't warn about declarations like

	enum { false, true } typedef boolean;

where a storage class specifier appears somewhere other than at the beginning
of a declaration.  Not only is this usage error-prone, the C Standard (section
3.9.3) says it's obsolescent.  Here's a patch.

Sat Aug  1 03:24:17 1992  Paul Eggert  (eggert@twinsun.com)

	* c-parse.y (reserved_declspecs, declmods): Warn about storage-class
	specifiers not at the start of declarations.
	* (declmods_with_qual, scspecs): New grammar rules.
	* invoke.texi: Document warning.


===================================================================
RCS file: RCS/invoke.texi,v
retrieving revision 2.2
diff -c -r2.2 invoke.texi
*** invoke.texi	1992/05/31 11:27:28	2.2
--- invoke.texi	1992/08/01 03:24:17
***************
*** 613,618 ****
--- 613,623 ----
  
  @item
  An unsigned value is compared against zero with @samp{>} or @samp{<=}.
+ 
+ @item
+ A storage-class specifier like @code{static} appears other than
+ at the beginning of a declaration.  According to the C Standard,
+ this usage is obsolescent.
  @end itemize
  
  @item -Wimplicit
===================================================================
RCS file: c-parse.y,v
retrieving revision 2.2.2.1
diff -c -r2.2.2.1 c-parse.y
*** c-parse.y	1992/07/25 00:04:28	2.2.2.1
--- c-parse.y	1992/08/01 03:17:55
***************
*** 145,150 ****
--- 145,151 ----
  %type <ttype> typed_declspecs reserved_declspecs
  %type <ttype> typed_typespecs reserved_typespecquals
  %type <ttype> declmods typespec typespecqual_reserved
+ %type <ttype> declmods_with_qual scspecs
  %type <ttype> SCSPEC TYPESPEC TYPE_QUAL nonempty_type_quals maybe_type_qual
  %type <ttype> initdecls notype_initdecls initdcl notype_initdcl
  %type <ttype> init initlist maybeasm
***************
*** 654,660 ****
  	| reserved_declspecs typespecqual_reserved
  		{ $$ = tree_cons (NULL_TREE, $2, $1); }
  	| reserved_declspecs SCSPEC
! 		{ $$ = tree_cons (NULL_TREE, $2, $1); }
  	;
  
  /* List of just storage classes and type modifiers.
--- 655,664 ----
  	| reserved_declspecs typespecqual_reserved
  		{ $$ = tree_cons (NULL_TREE, $2, $1); }
  	| reserved_declspecs SCSPEC
! 		{ if (extra_warnings)
! 		    warning ("`%s' is not at beginning of declaration",
! 			     IDENTIFIER_POINTER ($2));
! 		  $$ = tree_cons (NULL_TREE, $2, $1); }
  	;
  
  /* List of just storage classes and type modifiers.
***************
*** 662,677 ****
     to redeclare a typedef-name.  */
  
  declmods:
  	  TYPE_QUAL
  		{ $$ = tree_cons (NULL_TREE, $1, NULL_TREE); }
- 	| SCSPEC
- 		{ $$ = tree_cons (NULL_TREE, $1, NULL_TREE); }
  	| declmods TYPE_QUAL
  		{ $$ = tree_cons (NULL_TREE, $2, $1); }
! 	| declmods SCSPEC
! 		{ $$ = tree_cons (NULL_TREE, $2, $1); }
  	;
  
  
  /* Used instead of declspecs where storage classes are not allowed
     (that is, for typenames and structure components).
--- 666,693 ----
     to redeclare a typedef-name.  */
  
  declmods:
+ 	  declmods_with_qual
+ 	| scspecs
+ 	;
+ 
+ declmods_with_qual:
  	  TYPE_QUAL
  		{ $$ = tree_cons (NULL_TREE, $1, NULL_TREE); }
  	| declmods TYPE_QUAL
  		{ $$ = tree_cons (NULL_TREE, $2, $1); }
! 	| declmods_with_qual SCSPEC
! 		{ if (extra_warnings)
! 		    warning ("`%s' is not at beginning of declaration",
! 			     IDENTIFIER_POINTER ($2));
! 		  $$ = tree_cons (NULL_TREE, $2, $1); }
  	;
  
+ scspecs:
+ 	  SCSPEC
+ 		{ $$ = tree_cons (NULL_TREE, $1, NULL_TREE); }
+ 	| scspecs SCSPEC
+ 		{ $$ = tree_cons (NULL_TREE, $2, $1); }
+ 	;
  
  /* Used instead of declspecs where storage classes are not allowed
     (that is, for typenames and structure components).
Technical Details
Message-ID: <9208010400.AA07322@farside.twinsun.com>
Path: arc1-ca.pugleaf.net!sparky!uunet!cis.ohio-state.edu!twinsun.COM!eggert

Show Full Headers
Complete Article Headers
Newsgroups: gnu.gcc.bug
Path: arc1-ca.pugleaf.net!sparky!uunet!cis.ohio-state.edu!twinsun.COM!eggert
From: eggert@twinsun.COM (Paul Eggert)
Subject: GCC 2.2.2 doesn't warn about obsolescent use of storage class
Message-ID: <9208010400.AA07322@farside.twinsun.com>
Sender: gnulists@ai.mit.edu
Organization: GNUs Not Usenet
Distribution: gnu
Date: Sat, 1 Aug 1992 04:00:49 GMT
Approved: bug-gcc@prep.ai.mit.edu
Lines: 120