summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGiovanni Bajo <giovannibajo@gcc.gnu.org>2004-02-02 01:11:03 +0000
committerGiovanni Bajo <giovannibajo@gcc.gnu.org>2004-02-02 01:11:03 +0000
commit9febc4e8def2dbed004c56126ccd6218ffb6fd38 (patch)
treeff9e65b8e1aceaf78a8c2c9204db8ce66397f406
parent84b683c166f31e621e522c7c300fd82585fd6df6 (diff)
downloadgcc-9febc4e8def2dbed004c56126ccd6218ffb6fd38.tar.gz
re PR c++/13957 (Insufficient diagnostic for dependent expression parsed as non-type but instantiated as type)
PR c++/13957 * g++.dg/template/non-type-template-argument-1.C, g++.dg/template/qualified-id1.C: Update dg-error marks. * g++.dg/template/nontype6.C: New test. From-SVN: r77091
-rw-r--r--gcc/testsuite/ChangeLog7
-rw-r--r--gcc/testsuite/g++.dg/template/non-type-template-argument-1.C4
-rw-r--r--gcc/testsuite/g++.dg/template/nontype6.C19
-rw-r--r--gcc/testsuite/g++.dg/template/qualified-id1.C4
4 files changed, 30 insertions, 4 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index afd9ce64f24..87fe8b74ef5 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,10 @@
+2004-02-01 Giovanni Bajo <giovannibajo@gcc.gnu.org>
+
+ PR c++/13957
+ * g++.dg/template/non-type-template-argument-1.C,
+ g++.dg/template/qualified-id1.C: Update dg-error marks.
+ * g++.dg/template/nontype6.C: New test.
+
2004-02-01 Roger Sayle <roger@eyesopen.com>
* gcc.dg/builtins-1.c: Also test for __builtin_signbit{,f,l}.
diff --git a/gcc/testsuite/g++.dg/template/non-type-template-argument-1.C b/gcc/testsuite/g++.dg/template/non-type-template-argument-1.C
index 273017635c3..9d400d5b104 100644
--- a/gcc/testsuite/g++.dg/template/non-type-template-argument-1.C
+++ b/gcc/testsuite/g++.dg/template/non-type-template-argument-1.C
@@ -6,7 +6,7 @@ template <bool> struct C {};
template <typename T> struct D
{
- C<T::X> c; // { dg-error "names a type" }
+ C<T::X> c; // { dg-error "parsed as a non-type|if a type is meant" }
};
-D<B> d; // { dg-error "" }
+D<B> d; // { dg-error "instantiated from here" }
diff --git a/gcc/testsuite/g++.dg/template/nontype6.C b/gcc/testsuite/g++.dg/template/nontype6.C
new file mode 100644
index 00000000000..43470ccdb1d
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/nontype6.C
@@ -0,0 +1,19 @@
+// { dg-do compile }
+// Origin: <v dot haisman at sh dot cvut dot cz>
+// PR c++/13957: Improved error message for type in template (when non-type
+// is expected).
+
+template <class T>
+struct A
+{
+ typedef int type;
+};
+
+template <class T>
+void func(void)
+{
+ (void)A<T>::type(); // { dg-error "if a type is meant" }
+// { dg-error "parsed as a non-type" "" { target *-*-* } 15 }
+}
+
+template void func<float>(void); // { dg-error "instantiated from here" }
diff --git a/gcc/testsuite/g++.dg/template/qualified-id1.C b/gcc/testsuite/g++.dg/template/qualified-id1.C
index bbe23c2743b..967764281c0 100644
--- a/gcc/testsuite/g++.dg/template/qualified-id1.C
+++ b/gcc/testsuite/g++.dg/template/qualified-id1.C
@@ -16,8 +16,8 @@ template <> struct A::B<false> {};
template <typename T> void foo()
{
- T::C (); // { dg-error "names a type" "" }
- T::template B<false>(); // { dg-error "names a type" "" }
+ T::C (); // { dg-error "parsed as a non-type|if a type is meant" "" }
+ T::template B<false>(); // { dg-error "parsed as a non-type|if a type is meant" "" }
}
void bar()