From ca5786fd5b8f2faee60bf34507175f9047ec3ec8 Mon Sep 17 00:00:00 2001 From: Gabriel Dos Reis Date: Fri, 11 Oct 2002 18:00:46 +0000 Subject: [PATCH] PRs C++/6803, C++/7721 and C++/7803 PRs C++/6803, C++/7721 and C++/7803 * decl.c (grokdeclarator): Gracefully handle template-name as decl-specifier. From-SVN: r58054 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/decl.c | 10 ++++++++++ gcc/testsuite/g++.dg/parse/decl-specifier-1.C | 16 ++++++++++++++++ 3 files changed, 32 insertions(+) create mode 100644 gcc/testsuite/g++.dg/parse/decl-specifier-1.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index cc84a035c0a6..dddcaacfb3e8 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2002-10-10 Gabriel Dos Reis + + PRs C++/6803, C++/7721 and C++/7803 + * decl.c (grokdeclarator): Gracefully handle template-name as + decl-specifier. + 2002-10-09 Zack Weinberg PR c/7353 diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 26484d72ef17..6f11bd9de1ad 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -10060,6 +10060,16 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist) next = 0; break; + case TEMPLATE_DECL: + /* Sometimes, we see a template-name used as part of a + decl-specifier like in + std::allocator alloc; + Handle that gracefully. */ + error ("invalid use of template-name '%E' as type-specifier", + decl); + return error_mark_node; + break; + default: internal_error ("`%D' as declarator", decl); } diff --git a/gcc/testsuite/g++.dg/parse/decl-specifier-1.C b/gcc/testsuite/g++.dg/parse/decl-specifier-1.C new file mode 100644 index 000000000000..e81fbabf2c34 --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/decl-specifier-1.C @@ -0,0 +1,16 @@ +// Contributed by Gabriel Dos Reis +// Origin: PRs 7721 and 7803 +// { dg-do compile } + +namespace N +{ + template + struct X { }; +} + +N::X X; // { dg-error "" "" } + +int main() +{ + return sizeof(X); // { dg-error "" "" } +} -- 2.47.2