diff options
author | Giovanni Bajo <giovannibajo@gcc.gnu.org> | 2004-02-02 01:11:03 +0000 |
---|---|---|
committer | Giovanni Bajo <giovannibajo@gcc.gnu.org> | 2004-02-02 01:11:03 +0000 |
commit | 9febc4e8def2dbed004c56126ccd6218ffb6fd38 (patch) | |
tree | ff9e65b8e1aceaf78a8c2c9204db8ce66397f406 | |
parent | 84b683c166f31e621e522c7c300fd82585fd6df6 (diff) | |
download | gcc-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/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/non-type-template-argument-1.C | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/nontype6.C | 19 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/qualified-id1.C | 4 |
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() |