diff options
author | Jason Merrill <jason@redhat.com> | 2014-12-09 21:50:54 -0500 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2014-12-09 21:50:54 -0500 |
commit | 9c78f8e6055b086b2e4317e3fe11071f27ef0cb2 (patch) | |
tree | ace5a3416105badcda38170e537dea89c6fadc2b /gcc | |
parent | 6789ccfa469492579bfb23dedd20218153cdcd04 (diff) | |
download | gcc-9c78f8e6055b086b2e4317e3fe11071f27ef0cb2.zip gcc-9c78f8e6055b086b2e4317e3fe11071f27ef0cb2.tar.gz gcc-9c78f8e6055b086b2e4317e3fe11071f27ef0cb2.tar.bz2 |
re PR c++/64222 (error: ‘__FUNCTION__’ was not declared in this scope)
PR c++/64222
* parser.c (cp_parser_unqualified_id): Don't declare fname while
parsing function parms.
From-SVN: r218556
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/parser.c | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/parse/fnname1.C | 17 |
3 files changed, 27 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 361e634..8a8b536 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2014-12-09 Jason Merrill <jason@redhat.com> + + PR c++/64222 + * parser.c (cp_parser_unqualified_id): Don't declare fname while + parsing function parms. + 2014-12-03 Jason Merrill <jason@redhat.com> PR c++/64029 diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index d1cd63f..7bd9477 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -5207,7 +5207,10 @@ cp_parser_unqualified_id (cp_parser* parser, case RID_PRETTY_FUNCTION_NAME: case RID_C99_FUNCTION_NAME: cp_lexer_consume_token (parser->lexer); - finish_fname (token->u.value); + /* Don't try to declare this while tentatively parsing a function + declarator, as cp_make_fname_decl will fail. */ + if (current_binding_level->kind != sk_function_parms) + finish_fname (token->u.value); return token->u.value; default: diff --git a/gcc/testsuite/g++.dg/parse/fnname1.C b/gcc/testsuite/g++.dg/parse/fnname1.C new file mode 100644 index 0000000..2c18c30 --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/fnname1.C @@ -0,0 +1,17 @@ +// PR c++/64222 + +class A +{ +public: + A (const char *, void *); +}; +class B +{ +public: + B (A); +}; +void +fn1 () +{ + B a (A (__func__, 0)); +} |