From 2f69c594130c1b4f086e399d5148b9b3f802c5a0 Mon Sep 17 00:00:00 2001 From: Giovanni Bajo Date: Thu, 5 Feb 2004 16:50:57 +0000 Subject: [PATCH] re PR c++/14008 (Confusing diagnostic when omitting a template parameter) PR c++/14008 * g++.dg/parse/error15.C: New test. * g++.dg/parse/crash11.C: Update dg-error mark. From-SVN: r77324 --- gcc/testsuite/ChangeLog | 6 +++++ gcc/testsuite/g++.dg/parse/crash11.C | 2 +- gcc/testsuite/g++.dg/parse/error15.C | 39 ++++++++++++++++++++++++++++ 3 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/parse/error15.C diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index df3236f6f4c..50de43ff3f2 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2003-02-05 Giovanni Bajo + + PR c++/14008 + * g++.dg/parse/error15.C: New test. + * g++.dg/parse/crash11.C: Update dg-error mark. + 2004-02-04 Mark Mitchell PR c++/13932 diff --git a/gcc/testsuite/g++.dg/parse/crash11.C b/gcc/testsuite/g++.dg/parse/crash11.C index 4893678d46f..e6db364a247 100644 --- a/gcc/testsuite/g++.dg/parse/crash11.C +++ b/gcc/testsuite/g++.dg/parse/crash11.C @@ -30,5 +30,5 @@ struct C }; int main() { - typedef B::Template::Type Type; // { dg-error "init-declarator|;" } + typedef B::Template::Type Type; // { dg-error "does not name a type" } } diff --git a/gcc/testsuite/g++.dg/parse/error15.C b/gcc/testsuite/g++.dg/parse/error15.C new file mode 100644 index 00000000000..fd703824718 --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/error15.C @@ -0,0 +1,39 @@ +// { dg-do compile } +// Contributed by Volker Reichelt +// PR c++/14008: Improve diagnostic on invalid types in declarators. + +namespace N +{ + template struct A {}; + struct C {}; + int K; +} + +N::A f2; // { dg-error "without an argument list" } +N::INVALID f3; // { dg-error "in namespace `N' does not name a type" } +N::C::INVALID f4; // { dg-error "in class `N::C' does not name a type" } +N::K f6; // { dg-error "in namespace `N' does not name a type" } +typename N::A f7; // { dg-error "without an argument list|outside of template" } + +struct B +{ + N::A f2; // { dg-error "without an argument list" } + N::INVALID f3; // { dg-error "in namespace `N' does not name a type" } + N::C::INVALID f4; // { dg-error "in class `N::C' does not name a type" } + N::K f6; // { dg-error "in namespace `N' does not name a type" } + typename N::A f7; // { dg-error "without an argument list|outside of template" } +}; + +template +struct C +{ + N::A f2; // { dg-error "without an argument list" } + N::INVALID f3; // { dg-error "in namespace `N' does not name a type" } + N::C::INVALID f4; // { dg-error "in class `N::C' does not name a type" } + N::K f6; // { dg-error "in namespace `N' does not name a type" } + typename N::A f7; // { dg-error "without an argument list" } +}; + +// { dg-bogus "" "bogus excess errors in declaration" { xfail *-*-* } 16 } +// { dg-bogus "" "bogus excess errors in declaration" { xfail *-*-* } 24 } +// { dg-bogus "" "bogus excess errors in declaration" { xfail *-*-* } 34 } -- 2.30.2