egcs-1.1 C++ parser bug fix for extern C

Mumit Khan khan@xraylith.wisc.edu
Tue Sep 8 12:35:00 GMT 1998


Please see http://www.cygnus.com/ml/egcs-bugs/1998-Sep/0180.html for my bug 
report to egcs-bugs.

The following patch fixes the following bug in the C++ parser (introduced
since egcs-1.0.3a when initdcl0_innards was added):
  
  === ext_c_bug1.cc
  extern "C" foo ();
  =================

  % gcc -c ext_c_bug1.cc
  ext_c_bug1.cc:1: warning: ANSI C++ forbids declaration `' with no type
  ext_c_bug1.cc:1: abstract declarator `int' used as declaration

This bug is causing a real headache thanks for lots of legacy C headers
that need to be maintained.

The parser stack in nomods_initdcl0 is setup incorrectly, and so when
initdcl0_innards calls parse_decl(), incorrect parameter is passed for
the declarator.

No testsuite regressions for i686-pc-linux-gnu and hppa1.1-hp-hpux10.20.

Tue Sep  8 14:25:15 1998  Mumit Khan  <khan@xraylith.wisc.edu>

	* parse.y (nomods_initdcl0): Set up the parser stack correctly.

Index: gcc/cp/parse.y
===================================================================
RCS file: /mounts/sda7/src/gnu/CVSROOT/egcs-1.1-release/gcc/cp/parse.y,v
retrieving revision 1.1.1.1
diff -u -3 -p -r1.1.1.1 parse.y
--- parse.y	1998/09/07 00:11:07	1.1.1.1
+++ parse.y	1998/09/08 18:24:16
@@ -1883,7 +1883,7 @@ notype_initdcl0:
 nomods_initdcl0:
           notype_declarator maybeasm
             { /* Set things up as initdcl0_innards expects.  */
-	      $<ttype>$ = $1; 
+	      $<ttype>2 = $1; 
               $1 = NULL_TREE; }
           initdcl0_innards 
             {}

Regards,
Mumit



More information about the Gcc-patches mailing list