From b1521c3afad1b5a056cf973077a586dff7ee9392 Mon Sep 17 00:00:00 2001 From: Giovanni Bajo Date: Thu, 29 Jan 2004 04:26:50 +0000 Subject: [PATCH] error11.C: New test. * g++.dg/parse/error11.C: New test. * g++.dg/parse/error12.C: Likewise. From-SVN: r76846 --- gcc/testsuite/ChangeLog | 5 +++ gcc/testsuite/g++.dg/parse/error11.C | 53 ++++++++++++++++++++++++++++ gcc/testsuite/g++.dg/parse/error12.C | 12 +++++++ 3 files changed, 70 insertions(+) create mode 100644 gcc/testsuite/g++.dg/parse/error11.C create mode 100644 gcc/testsuite/g++.dg/parse/error12.C diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 482ea7a0184..7b7f692228b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2004-01-28 Giovanni Bajo + + * g++.dg/parse/error11.C: New test. + * g++.dg/parse/error12.C: Likewise. + 2004-01-28 Ziemowit Laski * objc.dg/proto-qual-1.m (ROUND, aligned_sizeof): New. diff --git a/gcc/testsuite/g++.dg/parse/error11.C b/gcc/testsuite/g++.dg/parse/error11.C new file mode 100644 index 00000000000..6b3deec178a --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/error11.C @@ -0,0 +1,53 @@ +// { dg-do compile } +// Origin: Giovanni Bajo +// Try to find out when the digraph '<:' is used as a mistake, and parse it +// correctly to avoid cascaded errors. + +struct B; + +template +struct Foo +{ + template + struct Nested + { + static void method(void) {} + }; + + void method(void) { + typename Foo<::B>::template Nested<::B> n; // { dg-error "cannot begin|alternate spelling" } + n.template Nested::method(); + n.template Nested<::B>::method(); // { dg-error "cannot begin|alternate spelling" } + Nested::method(); + Nested<::B>::method(); // { dg-error "cannot begin|alternate spelling" } + } +}; + +template struct Foo2 {}; +template struct Foo2<::B>; // { dg-error "cannot begin|alternate spelling|type/value mismatch|expected a constant" } + +int value = 0; + +void func(void) +{ + Foo<::B> f; // { dg-error "cannot begin|alternate spelling" } + f.Foo::method(); + f.Foo<::B>::method(); // { dg-error "cannot begin|alternate spelling" } + + // Check cases where we the token sequence is the correct one, but there + // was no digraph or whitespaces in the middle, so we should not emit + // the special error message. + Foo<: :B> k2; // { dg-bogus "cannot begin|alternate spelling" "smart error should not be triggered here" } + Foo[:B> k1; // { dg-bogus "cannot begin|alternate spelling" "smart error should not be triggered here" } +// { dg-error "" "" { target *-*-* } 40 } +// { dg-error "" "" { target *-*-* } 41 } + + int Foo[2]; + Foo[::value] = 0; +} + +template struct Foo<::B>; // { dg-error "cannot begin|alternate spelling" } + +// On the first error message, an additional note about the use of +// -fpermissive should be present +// { dg-error "-fpermissive" "" { target *-*-* } 18 } diff --git a/gcc/testsuite/g++.dg/parse/error12.C b/gcc/testsuite/g++.dg/parse/error12.C new file mode 100644 index 00000000000..ea04fd06d11 --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/error12.C @@ -0,0 +1,12 @@ +// { dg-do compile } +// Origin: Giovanni Bajo +// Make sure the error about '<:' can be turned into a warning +// { dg-options "-fpermissive" } + +struct B; + +template +struct Foo {}; + +Foo<::B> foo; // { dg-bogus "error" "error in place of warning" } +// { dg-error "" "" { target *-*-* } 11 } -- 2.30.2