diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 9be0bd68814133a9ab4feb9dac76873e1adeb5c0..b0b3f4430d2c7e541cdb98c4434110d1261d8552 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,23 @@ +2003-07-17 Andrew Pinski <pinskia@physics.uc.edu> + + PR c++/10476 + * g++.dg/expr/crash-1.C: New test. + + PR c++/11027 + * g++.dg/template/init3.C: New test. + + PR c++/8222 + * g++.dg/template/non-dependent1.C: New test. + + PR c++/11070 + * g++.dg/template/non-dependent2.C: New test. + + PR c++/11071 + * g++.dg/template/non-dependent3.C: New test. + + PR c++/9907 + * g++.dg/template/sizeof5.C: New test. + 2003-07-17 Geoffrey Keating <geoffk@apple.com> PR 11498 diff --git a/gcc/testsuite/g++.dg/expr/crash-1.C b/gcc/testsuite/g++.dg/expr/crash-1.C new file mode 100644 index 0000000000000000000000000000000000000000..d8d689fd67b0638bd6ab4e8d2e4fbf8181960db5 --- /dev/null +++ b/gcc/testsuite/g++.dg/expr/crash-1.C @@ -0,0 +1,15 @@ +// C++ PR/10476 +// Origin: larsbj@gullik.net and bangerth@dealii.org + + +struct X { + X(); + X(const X& __str); +}; +X const bar(); +void foo() +{ + X y; + (true ? y : bar()); +} + diff --git a/gcc/testsuite/g++.dg/template/init3.C b/gcc/testsuite/g++.dg/template/init3.C new file mode 100644 index 0000000000000000000000000000000000000000..9799a206d28954e48356ea49bc84a1c06988f17f --- /dev/null +++ b/gcc/testsuite/g++.dg/template/init3.C @@ -0,0 +1,11 @@ +// PR c++/11027 + +template <class T> +struct X { + typedef void (X::*pfun)(); + static pfun p[]; +}; + +template <class T> +typename X<T>::pfun X<T>::p[] = {}; + diff --git a/gcc/testsuite/g++.dg/template/non-dependent1.C b/gcc/testsuite/g++.dg/template/non-dependent1.C new file mode 100644 index 0000000000000000000000000000000000000000..3fe5c33d7823d015ccbf80b74bd713d1f206b7cc --- /dev/null +++ b/gcc/testsuite/g++.dg/template/non-dependent1.C @@ -0,0 +1,21 @@ +//PR c++/8222 +// Origin: giovannibajo@libero.it and setzersn@gmx.de + +// { dg-do run } + +struct Foo +{ + template <class> + void func() {} +}; +template <class> +void Bar(Foo* p) +{ + p->func<int>(); +} + +int main() +{ + Foo c; + Bar<int>(&c); +} diff --git a/gcc/testsuite/g++.dg/template/non-dependent2.C b/gcc/testsuite/g++.dg/template/non-dependent2.C new file mode 100644 index 0000000000000000000000000000000000000000..3b073b47a2b6eeca72e0b8f0ba41a59b2d38f5b4 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/non-dependent2.C @@ -0,0 +1,16 @@ +//PR c++/11070 +// Used to ICE +// Origin: bangerth@dealii.org and rwgk@yahoo.com + +template <bool b> struct X { + template <typename T> + static int* execute(int* x) { return x; } +}; + +template <typename T> void foo() { + static bool const same = true; + X<same>::execute<int> (0); +} + +template void foo<int> (); + diff --git a/gcc/testsuite/g++.dg/template/non-dependent3.C b/gcc/testsuite/g++.dg/template/non-dependent3.C new file mode 100644 index 0000000000000000000000000000000000000000..ce18bf243db12c36ba144d134dd83b7fd2db801a --- /dev/null +++ b/gcc/testsuite/g++.dg/template/non-dependent3.C @@ -0,0 +1,15 @@ +//PR c++/11071 +// Used to ICE +// Origin: bangerth@dealii.org and rwgk@yahoo.com + +template <bool b> struct X { + template <typename T> + static int* execute(T* x) { return x; } +}; + +template <typename T> void foo() { + static bool const same = true; + X<same>::execute ((int*)0); +} + +template void foo<int> (); diff --git a/gcc/testsuite/g++.dg/template/sizeof5.C b/gcc/testsuite/g++.dg/template/sizeof5.C new file mode 100644 index 0000000000000000000000000000000000000000..4096fed5329ccca978cb1dd2c2800be509e23e2c --- /dev/null +++ b/gcc/testsuite/g++.dg/template/sizeof5.C @@ -0,0 +1,15 @@ +// PR c++/9907 +// Origin: nes@lrde.epita.fr +// sizeof(foo()) was not considered constant. + + +template <unsigned n> struct bar {}; + +int foo(); + +template <class T> +void baz() +{ + bar<sizeof(foo())> b; +} +