c++/4315: GCC giver parse error for valid code inside a template

matti.rintala@tut.fi matti.rintala@tut.fi
Thu Sep 13 04:06:00 GMT 2001


>Number:         4315
>Category:       c++
>Synopsis:       GCC giver parse error for valid code inside a template
>Confidential:   no
>Severity:       critical
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          rejects-legal
>Submitter-Id:   net
>Arrival-Date:   Thu Sep 13 04:06:01 PDT 2001
>Closed-Date:
>Last-Modified:
>Originator:     Matti Rintala
>Release:        3.0.1
>Organization:
Tampere University of Technology
>Environment:
System: Linux pulu.cs.tut.fi 2.4.9 #1 Fri Aug 24 11:24:56 EEST 2001 i686 unknown
Architecture: i686

	
host: i686-pc-linux-gnu
build: i686-pc-linux-gnu
target: i686-pc-linux-gnu
configured with: ../gcc-3.0.1/configure --prefix=/usr/local/gcc-3.0.1 --enable-shared --enable-threads --enable-cpp --with-cpu=i686
>Description:
	The following small program gives a parse error, although it's legal.
	Curiously enough, the error only occurs inside a template function. If
	the same code is inside a normal function, no error occurs.
>How-To-Repeat:
	The following program:
-----------
class X
{
public:
  template<typename T>
  void m();
};

void f()
{
  X x;
  X* p = &x;
  p->m<int>();
}

template<typename Q>
void t(Q q)
{
  X x;
  X* p = &x;
  p->m<int>(); // This line gives a parse error
}
-------------
gives the following error when compiled with -v:
Reading specs from /usr/local/gcc3/bin/../lib/gcc-lib/i686-pc-linux-gnu/3.0.1/specs
Configured with: ../gcc-3.0.1/configure --prefix=/usr/local/gcc-3.0.1 --enable-shared --enable-threads --enable-cpp --with-cpu=i686
Thread model: posix
gcc version 3.0.1
 /usr/local/gcc3/bin/../lib/gcc-lib/i686-pc-linux-gnu/3.0.1/cc1plus -v -iprefix /usr/local/gcc3/bin/../lib/gcc-lib/i686-pc-linux-gnu/3.0.1/ -D__GNUC__=3 -D__GNUC_MINOR__=0 -D__GNUC_PATCHLEVEL__=1 -D__ELF__ -Dunix -Dlinux -D__ELF__ -D__unix__ -D__linux__ -D__unix -D__linux -Asystem=posix -D__NO_INLINE__ -D__STDC_HOSTED__=1 -D_GNU_SOURCE -Acpu=i386 -Amachine=i386 -Di386 -D__i386 -D__i386__ -D__tune_i686__ -D__tune_pentiumpro__ virhe.cc -D__GNUG__=3 -D__GXX_DEPRECATED -D__EXCEPTIONS -D__GXX_ABI_VERSION=100 -quiet -dumpbase virhe.cc -version -o /tmp/cctiwNsA.s
GNU CPP version 3.0.1 (cpplib) (i386 Linux/ELF)
GNU C++ version 3.0.1 (i686-pc-linux-gnu)
	compiled by GNU C version 3.0.1.
ignoring nonexistent directory "/usr/local/gcc3/i686-pc-linux-gnu/include"
ignoring nonexistent directory "/usr/local/gcc-3.0.1/i686-pc-linux-gnu/include"
ignoring duplicate directory "/usr/local/gcc-3.0.1/include/g++-v3"
ignoring duplicate directory "/usr/local/gcc-3.0.1/include/g++-v3/i686-pc-linux-gnu"
ignoring duplicate directory "/usr/local/gcc-3.0.1/include/g++-v3/backward"
ignoring duplicate directory "/usr/local/gcc-3.0.1/lib/gcc-lib/i686-pc-linux-gnu/3.0.1/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/local/gcc3/include/g++-v3
 /usr/local/gcc3/include/g++-v3/i686-pc-linux-gnu
 /usr/local/gcc3/include/g++-v3/backward
 /usr/local/gcc3/lib/gcc-lib/i686-pc-linux-gnu/3.0.1/include
 /usr/local/include
 /usr/include
End of search list.
virhe.cc: In function `void t(Q)':
virhe.cc:20: parse error before `>' token

---------------
I also tried with a quite recent CVS snapshot and the same problem occurred.
>Fix:
	
>Release-Note:
>Audit-Trail:
>Unformatted:



More information about the Gcc-bugs mailing list