diff options
| -rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
| -rw-r--r-- | gcc/cp/spew.c | 9 | ||||
| -rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
| -rw-r--r-- | gcc/testsuite/g++.old-deja/g++.other/lineno5.C | 19 |
4 files changed, 35 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 949dd82bbf0..dd1be64de8e 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,10 @@ 2001-07-26 Nathan Sidwell <nathan@codesourcery.com> + * spew.c (yylex): Only copy the token's lineno, if it is + non-zero. + +2001-07-26 Nathan Sidwell <nathan@codesourcery.com> + PR c++/3624 * call.c (resolve_args): Simplify, call convert_from_reference. diff --git a/gcc/cp/spew.c b/gcc/cp/spew.c index 7a92d9d0caf..28b2323ed99 100644 --- a/gcc/cp/spew.c +++ b/gcc/cp/spew.c @@ -833,8 +833,13 @@ yylex () got_object = NULL_TREE; yychar = yychr; - yylval = nth_token (0)->yylval; - lineno = nth_token (0)->lineno; + { + struct token *tok = nth_token (0); + + yylval = tok->yylval; + if (tok->lineno) + lineno = tok->lineno; + } #ifdef SPEW_DEBUG if (spew_debug) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 55f597fe5ec..f2354d4a76e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,9 @@ 2001-07-26 Nathan Sidwell <nathan@codesourcery.com> + * g++.old-deja/g++.other/lineno5.C: New test. + +2001-07-26 Nathan Sidwell <nathan@codesourcery.com> + * g++.old-deja/g++.pt/crash68.C: New test. 2001-07-26 Nathan Sidwell <nathan@codesourcery.com> diff --git a/gcc/testsuite/g++.old-deja/g++.other/lineno5.C b/gcc/testsuite/g++.old-deja/g++.other/lineno5.C new file mode 100644 index 00000000000..dc779ed894a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.other/lineno5.C @@ -0,0 +1,19 @@ +// Build don't link: +// +// Copyright (C) 2001 Free Software Foundation, Inc. +// Contributed by Nathan Sidwell 25 Jul 2001 <nathan@codesourcery.com> + +// Origin: johanb@DoCS.UU.SE +// Bug 3621. At the end of saved input, we'd set the lineno to +// zero. This would confusing things no end, if there was a subsequent +// error. + +namespace tmp { + typedef int B; + B b; +} + +class A { + public: + int kaka(tmp::B = b); // ERROR - no b in scope +}; |

