re PR c++/14008 (Confusing diagnostic when omitting a template parameter)
authorGiovanni Bajo <giovannibajo@gcc.gnu.org>
Thu, 5 Feb 2004 16:50:57 +0000 (16:50 +0000)
committerGiovanni Bajo <giovannibajo@gcc.gnu.org>
Thu, 5 Feb 2004 16:50:57 +0000 (16:50 +0000)
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
gcc/testsuite/g++.dg/parse/crash11.C
gcc/testsuite/g++.dg/parse/error15.C [new file with mode: 0644]

index df3236f..50de43f 100644 (file)
@@ -1,3 +1,9 @@
+2003-02-05  Giovanni Bajo  <giovannibajo@gcc.gnu.org>
+
+       PR c++/14008
+       * g++.dg/parse/error15.C: New test.
+       * g++.dg/parse/crash11.C: Update dg-error mark.
+
 2004-02-04  Mark Mitchell  <mark@codesourcery.com>
 
        PR c++/13932
index 4893678..e6db364 100644 (file)
@@ -30,5 +30,5 @@ struct C
 };
 int main()
 {
-  typedef B<C>::Template<void>::Type Type; // { dg-error "init-declarator|;" }
+  typedef B<C>::Template<void>::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 (file)
index 0000000..fd70382
--- /dev/null
@@ -0,0 +1,39 @@
+// { dg-do compile }
+// Contributed by Volker Reichelt <reichelt at gcc dot gnu dot org> 
+// PR c++/14008: Improve diagnostic on invalid types in declarators.
+
+namespace N
+{ 
+  template<int> 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 <int>
+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 }