From 554fd8c5195424bdbcabf5de30fdc183aba391bd Mon Sep 17 00:00:00 2001 From: upstream source tree Date: Sun, 15 Mar 2015 20:14:05 -0400 Subject: obtained gcc-4.6.4.tar.bz2 from upstream website; verified gcc-4.6.4.tar.bz2.sig; imported gcc-4.6.4 source tree from verified upstream tarball. downloading a git-generated archive based on the 'upstream' tag should provide you with a source tree that is binary identical to the one extracted from the above tarball. if you have obtained the source via the command 'git clone', however, do note that line-endings of files in your working directory might differ from line-endings of the respective files in the upstream repository. --- gcc/testsuite/g++.old-deja/g++.oliva/ChangeLog | 147 +++++++++++++++++++++ gcc/testsuite/g++.old-deja/g++.oliva/ctor1.C | 19 +++ gcc/testsuite/g++.old-deja/g++.oliva/delete1.C | 31 +++++ gcc/testsuite/g++.old-deja/g++.oliva/delete2.C | 26 ++++ gcc/testsuite/g++.old-deja/g++.oliva/delete3.C | 38 ++++++ gcc/testsuite/g++.old-deja/g++.oliva/delete4.C | 30 +++++ gcc/testsuite/g++.old-deja/g++.oliva/delete5.C | 30 +++++ gcc/testsuite/g++.old-deja/g++.oliva/dwarf1.C | 15 +++ gcc/testsuite/g++.old-deja/g++.oliva/dwarf2.C | 10 ++ gcc/testsuite/g++.old-deja/g++.oliva/dwarf3.C | 25 ++++ gcc/testsuite/g++.old-deja/g++.oliva/expr1.C | 12 ++ gcc/testsuite/g++.old-deja/g++.oliva/expr2.C | 16 +++ gcc/testsuite/g++.old-deja/g++.oliva/ext1.C | 19 +++ gcc/testsuite/g++.old-deja/g++.oliva/friend1.C | 12 ++ gcc/testsuite/g++.old-deja/g++.oliva/inline1.C | 30 +++++ .../g++.old-deja/g++.oliva/linkage1-main.cc | 13 ++ gcc/testsuite/g++.old-deja/g++.oliva/linkage1.C | 20 +++ gcc/testsuite/g++.old-deja/g++.oliva/nameret1.C | 14 ++ gcc/testsuite/g++.old-deja/g++.oliva/nameret2.C | 15 +++ gcc/testsuite/g++.old-deja/g++.oliva/new1.C | 20 +++ gcc/testsuite/g++.old-deja/g++.oliva/ns1.C | 13 ++ gcc/testsuite/g++.old-deja/g++.oliva/ns2.C | 15 +++ gcc/testsuite/g++.old-deja/g++.oliva/ns3.C | 13 ++ gcc/testsuite/g++.old-deja/g++.oliva/overload1.C | 24 ++++ gcc/testsuite/g++.old-deja/g++.oliva/partord1.C | 28 ++++ gcc/testsuite/g++.old-deja/g++.oliva/partspec1.C | 20 +++ gcc/testsuite/g++.old-deja/g++.oliva/stkalign.C | 18 +++ gcc/testsuite/g++.old-deja/g++.oliva/template1.C | 15 +++ gcc/testsuite/g++.old-deja/g++.oliva/template10.C | 22 +++ gcc/testsuite/g++.old-deja/g++.oliva/template2.C | 14 ++ gcc/testsuite/g++.old-deja/g++.oliva/template3.C | 9 ++ gcc/testsuite/g++.old-deja/g++.oliva/template4.C | 20 +++ gcc/testsuite/g++.old-deja/g++.oliva/template5.C | 12 ++ gcc/testsuite/g++.old-deja/g++.oliva/template6.C | 12 ++ gcc/testsuite/g++.old-deja/g++.oliva/template7.C | 14 ++ gcc/testsuite/g++.old-deja/g++.oliva/template8.C | 18 +++ gcc/testsuite/g++.old-deja/g++.oliva/template9.C | 11 ++ gcc/testsuite/g++.old-deja/g++.oliva/thunk1.C | 36 +++++ gcc/testsuite/g++.old-deja/g++.oliva/typename1.C | 16 +++ gcc/testsuite/g++.old-deja/g++.oliva/typename2.C | 28 ++++ gcc/testsuite/g++.old-deja/g++.oliva/typeof1.C | 19 +++ 41 files changed, 919 insertions(+) create mode 100644 gcc/testsuite/g++.old-deja/g++.oliva/ChangeLog create mode 100644 gcc/testsuite/g++.old-deja/g++.oliva/ctor1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.oliva/delete1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.oliva/delete2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.oliva/delete3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.oliva/delete4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.oliva/delete5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.oliva/dwarf1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.oliva/dwarf2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.oliva/dwarf3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.oliva/expr1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.oliva/expr2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.oliva/ext1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.oliva/friend1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.oliva/inline1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.oliva/linkage1-main.cc create mode 100644 gcc/testsuite/g++.old-deja/g++.oliva/linkage1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.oliva/nameret1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.oliva/nameret2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.oliva/new1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.oliva/ns1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.oliva/ns2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.oliva/ns3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.oliva/overload1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.oliva/partord1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.oliva/partspec1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.oliva/stkalign.C create mode 100644 gcc/testsuite/g++.old-deja/g++.oliva/template1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.oliva/template10.C create mode 100644 gcc/testsuite/g++.old-deja/g++.oliva/template2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.oliva/template3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.oliva/template4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.oliva/template5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.oliva/template6.C create mode 100644 gcc/testsuite/g++.old-deja/g++.oliva/template7.C create mode 100644 gcc/testsuite/g++.old-deja/g++.oliva/template8.C create mode 100644 gcc/testsuite/g++.old-deja/g++.oliva/template9.C create mode 100644 gcc/testsuite/g++.old-deja/g++.oliva/thunk1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.oliva/typename1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.oliva/typename2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.oliva/typeof1.C (limited to 'gcc/testsuite/g++.old-deja/g++.oliva') diff --git a/gcc/testsuite/g++.old-deja/g++.oliva/ChangeLog b/gcc/testsuite/g++.old-deja/g++.oliva/ChangeLog new file mode 100644 index 000000000..363ea1795 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.oliva/ChangeLog @@ -0,0 +1,147 @@ +2013-04-12 Release Manager + + * GCC 4.6.4 released. + +2012-03-01 Release Manager + + * GCC 4.6.3 released. + +2011-10-26 Release Manager + + * GCC 4.6.2 released. + +2011-06-27 Release Manager + + * GCC 4.6.1 released. + +2011-03-25 Release Manager + + * GCC 4.6.0 released. + +2005-04-03 Alexandre Oliva + + PR c++/19199 + * expr2.C: Fixed. + +2003-06-04 J"orn Rennecke + + * template1.C (bar): Remove xfail marker. + +2002-07-06 Alexandre Oliva + + * linkage1.C, linkage1-main.cc: New test. + +2001-02-15 Alexandre Oliva + + * friend1.C: New test. + +2000-05-28 Alexandre Oliva + + * expr2.C: New test. + +2000-04-19 Alexandre Oliva + + * stkalign.C: New test. + +1999-12-22 Alexandre Oliva + + * nameret2.C: New test. + + * nameret1.C: New test. + + * template10.C: New test. + +1999-11-21 Alexandre Oliva + + * delete2.C, delete3.C, delete4.C, delete5.C: New tests. + +1999-11-19 Alexandre Oliva + + * template7.C: Crash test passes, bug error is now bogus. + +1999-11-11 Alexandre Oliva + + * template9.C: New test. + +1999-09-18 Alexandre Oliva + + * overload1.C: New test. + + * inline1.C: New test. + +1999-08-25 Alexandre Oliva + + * thunk1.C: New test. + +1999-08-06 Alexandre Oliva + + * dwarf2.C, dwarf3.C: Added XFAIL for Solaris/x86. Removed + -gdwarf. + * dwarf1.C: Removed -gdwarf. + +1999-08-05 Alexandre Oliva + + * new1.C, template8.C: Removed XFAIL. + * template3.C: Re-introduced XFAIL. :-( + +1999-08-03 Alexandre Oliva + + * ext1.C: New test. + + * dwarf1.C, dwarf2.C, dwarf3.C: New tests. + +1999-07-20 Alexandre Oliva + + * template8.C, typeof1.C: New test. + +1999-07-17 Alexandre Oliva + + * template6.C, delete1.C, template7.C: New test. + +1999-07-13 Alexandre Oliva + + * template5.C: New test. + + * template4.C: New test. + + * expr1.C: New test. + + * partspec1.C: New test. + +1999-07-05 Alexandre Oliva + + * typename1.C, typename2.C: New tests. + + * template3.C: Fixed. + + * ns3.C: New test. + +1999-07-03 Alexandre Oliva + + * ctor1.C: New test. + + * template3.C: New test. + +1999-07-02 Alexandre Oliva + + * ns1.C: Typo. + * ns2.C: New test. + + * template2.C: New test. + + * ns1.C: New test. + +1999-07-01 Alexandre Oliva + + * new1.C: New test. + + * partord1.C: New test. + + * template1.C: New test. + + +Copyright (C) 1999, 2000, 2001, 2002, 2003, 2005 Free Software Foundation, Inc. + +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. diff --git a/gcc/testsuite/g++.old-deja/g++.oliva/ctor1.C b/gcc/testsuite/g++.old-deja/g++.oliva/ctor1.C new file mode 100644 index 000000000..d8ad0c74d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.oliva/ctor1.C @@ -0,0 +1,19 @@ +// { dg-do assemble } + +// Copyright (C) 1999 Free Software Foundation + +// by Alexandre Oliva +// based on bug report by Harri Porten + +struct A { + A() : x; // { dg-error "" } missing body +}; + +struct B { + void m() {} +}; + +struct C { + // The error message below says it is within A::B::m()! + void n() {} +}; diff --git a/gcc/testsuite/g++.old-deja/g++.oliva/delete1.C b/gcc/testsuite/g++.old-deja/g++.oliva/delete1.C new file mode 100644 index 000000000..368a87a2a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.oliva/delete1.C @@ -0,0 +1,31 @@ +// { dg-do assemble } + +// Copyright (C) 1999, 2001 Free Software Foundation + +// by Alexandre Oliva +// simplified from bug report by K. Haley +// based on analysis by Martin v. Loewis + +// [class.dtor]/11: delete must be implicitly checked for +// accessibility only in the definition of virtual destructors, +// implicitly defined or not. + +struct foo { + foo() {} +private: + void operator delete(void *) {} // { dg-error "" } private +} foo_; + +struct bar : foo { + ~bar() { + delete this; // { dg-error "" } delete is private + // An implicit invocation of delete is emitted in destructors, but + // it should only be checked in virtual destructors + } // { dg-bogus "" } not virtual +} bar_; + +struct baz : foo { + virtual ~baz() {} // { dg-error "" } delete is private in vdtor +} baz_; + +struct bad : baz {} bad_; // { dg-message "" } delete is private in vdtor diff --git a/gcc/testsuite/g++.old-deja/g++.oliva/delete2.C b/gcc/testsuite/g++.old-deja/g++.oliva/delete2.C new file mode 100644 index 000000000..4a5cda45e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.oliva/delete2.C @@ -0,0 +1,26 @@ +// { dg-do run } +// Copyright (C) 1999 Free Software Foundation + +// by Alexandre Oliva +// distilled from bug report by Barry M. Caceres + +// Test whether dtors of vbases are called on delete[]. + +extern "C" void abort(); +extern "C" void exit(int); + +struct Foo { + ~Foo() { + exit(0); + } +}; + +struct Bar : virtual Foo { +}; + +int main() { + delete [] new Bar[1]; + abort(); +} + + diff --git a/gcc/testsuite/g++.old-deja/g++.oliva/delete3.C b/gcc/testsuite/g++.old-deja/g++.oliva/delete3.C new file mode 100644 index 000000000..39b6fbe9e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.oliva/delete3.C @@ -0,0 +1,38 @@ +// { dg-do run } +// Copyright (C) 1999 Free Software Foundation + +// by Alexandre Oliva + +// Test whether dtors of vbases are called on throw within new[]. +// Variant of delete2.C. + +extern "C" void abort(); +extern "C" void exit(int); + +struct Foo { + static bool first; + + Foo() { + if (first) + first = false; + else + throw first; + } + + ~Foo() { + exit(0); + } +}; + +bool Foo::first = true; + +struct Bar : virtual Foo { +}; + +int main() { + try { + delete [] new Bar[2]; + } catch (...) { + } + abort(); +} diff --git a/gcc/testsuite/g++.old-deja/g++.oliva/delete4.C b/gcc/testsuite/g++.old-deja/g++.oliva/delete4.C new file mode 100644 index 000000000..83084a173 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.oliva/delete4.C @@ -0,0 +1,30 @@ +// { dg-do run } +// Copyright (C) 1999 Free Software Foundation + +// by Alexandre Oliva + +// Test whether dtors of vbases are called from dtor of aggregate of array. +// Variant of delete2.C and delete3.C. + +extern "C" void abort(); +extern "C" void exit(int); + +struct Foo { + ~Foo() { + exit(0); + } +}; + +struct Bar : virtual Foo { +}; + +struct Baz { + Bar i[1]; +}; + +int main() { + Baz(); + abort(); +} + + diff --git a/gcc/testsuite/g++.old-deja/g++.oliva/delete5.C b/gcc/testsuite/g++.old-deja/g++.oliva/delete5.C new file mode 100644 index 000000000..daf2b53a7 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.oliva/delete5.C @@ -0,0 +1,30 @@ +// { dg-do run } +// Copyright (C) 1999 Free Software Foundation + +// by Alexandre Oliva + +// Test whether dtors of vbases are called from dtor of auto array. +// Variant of delete2.C, delete3.C and delete4.C. + +extern "C" void abort(); +extern "C" void exit(int); + +struct Foo { + ~Foo() { + exit(0); + } +}; + +struct Bar : virtual Foo { +}; + +void foo() { + Bar i[1]; +} + +int main() { + foo(); + abort(); +} + + diff --git a/gcc/testsuite/g++.old-deja/g++.oliva/dwarf1.C b/gcc/testsuite/g++.old-deja/g++.oliva/dwarf1.C new file mode 100644 index 000000000..3b932f712 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.oliva/dwarf1.C @@ -0,0 +1,15 @@ +// { dg-do assemble } + +// Copyright (C) 1999 Free Software Foundation + +// by Alexandre Oliva +// based on bug report by Chris McKay + +// Used to fail with dwarf debugging. + +template +struct foo { + static const int ELEMENTS = 1; + int bar[ELEMENTS]; +}; +foo<> bar; diff --git a/gcc/testsuite/g++.old-deja/g++.oliva/dwarf2.C b/gcc/testsuite/g++.old-deja/g++.oliva/dwarf2.C new file mode 100644 index 000000000..c50b1b7d6 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.oliva/dwarf2.C @@ -0,0 +1,10 @@ +// { dg-do assemble } + +// Copyright (C) 1999 Free Software Foundation + +// by Alexandre Oliva + +// Fails with dwarf debugging. + +typedef __java_boolean jboolean; +void foo() {} diff --git a/gcc/testsuite/g++.old-deja/g++.oliva/dwarf3.C b/gcc/testsuite/g++.old-deja/g++.oliva/dwarf3.C new file mode 100644 index 000000000..bbe5b0c9c --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.oliva/dwarf3.C @@ -0,0 +1,25 @@ +// { dg-do assemble } + +// Copyright (C) 1999 Free Software Foundation + +// by Alexandre Oliva +// based on bug report by Andreas Stolcke + +// Fails with dwarf debugging. + +template struct foo { + int data[1]; +}; + +template struct bar { + bar(foo<> *); +}; + +template bar::bar(foo<> *x) { + *x; +} + +void baz() { + foo<> *baz; + bar<> baar(baz); +} diff --git a/gcc/testsuite/g++.old-deja/g++.oliva/expr1.C b/gcc/testsuite/g++.old-deja/g++.oliva/expr1.C new file mode 100644 index 000000000..2d6e8f96b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.oliva/expr1.C @@ -0,0 +1,12 @@ +// { dg-do assemble } + +// Copyright (C) 1999 Free Software Foundation + +// by Alexandre Oliva +// simplified from bug report by Tudor Hulubei + +// gcc 2.95 reports: +// invalid operands `foo' and `int' to binary `operator !=' + +class foo {} bar; +int i = void(bar) ? 1 : 0; // { dg-bogus "" "" { xfail *-*-* } } - operator!= - diff --git a/gcc/testsuite/g++.old-deja/g++.oliva/expr2.C b/gcc/testsuite/g++.old-deja/g++.oliva/expr2.C new file mode 100644 index 000000000..1e63c645b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.oliva/expr2.C @@ -0,0 +1,16 @@ +// { dg-do run } + +// Copyright (C) 2000 Free Software Foundation + +// by Alexandre Oliva + +int i, j; + +const int &f(const int& I, const int& J) { + // this must not be optimized to I because it's an lvalue + return (I != J) ? I : J; +} + +int main () { + return (&f(i, j) != &j); +} diff --git a/gcc/testsuite/g++.old-deja/g++.oliva/ext1.C b/gcc/testsuite/g++.old-deja/g++.oliva/ext1.C new file mode 100644 index 000000000..1bc37357a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.oliva/ext1.C @@ -0,0 +1,19 @@ +// { dg-do run } +// { dg-options "" } +// Copyright (C) 1999 Free Software Foundation + +// by Alexandre Oliva +// simplified from bug report by Michael Rosenbruch + + +extern "C" void abort(); + +int main () { + char x[1]; + char *y = x ? /* implicit x */ : 0; + /* For some reason, the array x is copied twice, and y points to the + second copy (the first is never used). If x is explicit, no copy + is created, and the program succeeds. */ + if (x != y) + abort(); +} diff --git a/gcc/testsuite/g++.old-deja/g++.oliva/friend1.C b/gcc/testsuite/g++.old-deja/g++.oliva/friend1.C new file mode 100644 index 000000000..636260780 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.oliva/friend1.C @@ -0,0 +1,12 @@ +// { dg-do assemble } + +// Copyright (C) 2001 Free Software Foundation + +// by Alexandre Oliva + +// We shouldn't warn about bar referring to a non-template in this case. + +template +class foo { + friend int bar(int); +}; diff --git a/gcc/testsuite/g++.old-deja/g++.oliva/inline1.C b/gcc/testsuite/g++.old-deja/g++.oliva/inline1.C new file mode 100644 index 000000000..f182b8344 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.oliva/inline1.C @@ -0,0 +1,30 @@ +// { dg-do assemble } + +// Copyright (C) 1999 Free Software Foundation + +// by Alexandre Oliva +// Derived from GNU lilypond. + + +struct foo { + foo(); + foo(const foo&); + ~foo(); +}; + +struct bar { + foo foo_member; + bar(); + bar(const bar&); + // ~bar(); +}; + +struct baz { + void error (bar s); +}; + +void fail() __attribute__((noreturn)); + +void baz::error (bar s) { + fail(); +} diff --git a/gcc/testsuite/g++.old-deja/g++.oliva/linkage1-main.cc b/gcc/testsuite/g++.old-deja/g++.oliva/linkage1-main.cc new file mode 100644 index 000000000..80d27c36c --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.oliva/linkage1-main.cc @@ -0,0 +1,13 @@ +// Copyright 2002 Free Software Foundation + +// Derived by Alexandre Oliva from code posted by +// Mark Mitchell + +typedef struct { + void f(); +} S; + +int main() { + S s; + s.f(); +} diff --git a/gcc/testsuite/g++.old-deja/g++.oliva/linkage1.C b/gcc/testsuite/g++.old-deja/g++.oliva/linkage1.C new file mode 100644 index 000000000..23295ea36 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.oliva/linkage1.C @@ -0,0 +1,20 @@ +// { dg-do link } +// { dg-additional-sources " linkage1-main.cc" } + +// Copyright 2002 Free Software Foundation + +// Derived by Alexandre Oliva from code posted by +// Mark Mitchell + +// Verify that a member of a class is given global linkage when it's a +// member of a function whose name is taken from a typedef, by +// checking that another translation unit can call it. We don't do +// the right things on functions, but we do on data members. + +// { dg-bogus "" "" { xfail *-*-* } 0 } + +typedef struct { + void f(); +} S; + +void S::f() {} diff --git a/gcc/testsuite/g++.old-deja/g++.oliva/nameret1.C b/gcc/testsuite/g++.old-deja/g++.oliva/nameret1.C new file mode 100644 index 000000000..b32deedd4 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.oliva/nameret1.C @@ -0,0 +1,14 @@ +// { dg-do assemble } +// { dg-options "-Wno-deprecated" } +// Copyright (C) 1999, 2000, 2002 Free Software Foundation + +// by Alexandre Oliva + +// distilled from libg++'s Rational.cc + + +inline int bar () return r {} // { dg-error "" } + +int foo () { + return bar (); +} diff --git a/gcc/testsuite/g++.old-deja/g++.oliva/nameret2.C b/gcc/testsuite/g++.old-deja/g++.oliva/nameret2.C new file mode 100644 index 000000000..e0dfb7e12 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.oliva/nameret2.C @@ -0,0 +1,15 @@ +// { dg-do assemble } +// { dg-options "-O1 -Wno-deprecated" } +// Copyright (C) 1999, 2000, 2002 Free Software Foundation + +// by Alexandre Oliva + +// distilled from libg++'s Integer.cc + + +inline int bar () return r {} // { dg-error "" } + +int& foo (int& x) { + bar (); + return x; +} diff --git a/gcc/testsuite/g++.old-deja/g++.oliva/new1.C b/gcc/testsuite/g++.old-deja/g++.oliva/new1.C new file mode 100644 index 000000000..86d25f8e6 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.oliva/new1.C @@ -0,0 +1,20 @@ +// { dg-do run } +// Copyright (C) 1999 Free Software Foundation + +// by Alexandre Oliva + +// based on comp.std.c++ post by Alexander Schiemann + +// execution test + +#include +#include + +struct A { + A() { throw 0; } + void* operator new(size_t size, double = 0.0) { return ::operator new(size);} + void operator delete(void* p, double) { exit(0); } + void operator delete(void* p) { abort(); } +}; + +int main() { try { new A; } catch(...) {} } diff --git a/gcc/testsuite/g++.old-deja/g++.oliva/ns1.C b/gcc/testsuite/g++.old-deja/g++.oliva/ns1.C new file mode 100644 index 000000000..cda0f0e2e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.oliva/ns1.C @@ -0,0 +1,13 @@ +// { dg-do assemble } + +// Copyright (C) 1999, 2000 Free Software Foundation + +// by Alexandre Oliva +// based on bug report by Dima Volodin + +void foo(); +namespace bar { + class baz { + friend void ::foo(); // { dg-bogus "" } parse error + }; +} diff --git a/gcc/testsuite/g++.old-deja/g++.oliva/ns2.C b/gcc/testsuite/g++.old-deja/g++.oliva/ns2.C new file mode 100644 index 000000000..0541a3f71 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.oliva/ns2.C @@ -0,0 +1,15 @@ +// { dg-do assemble } + +// Copyright (C) 1999 Free Software Foundation + +// by Alexandre Oliva +// based on bug report by Dima Volodin +// variation of ns1.C + +void foo(); +namespace bar { + using ::foo; + class baz { + friend void foo(); // { dg-bogus "" "" { xfail *-*-* } } - conflict - + }; +} diff --git a/gcc/testsuite/g++.old-deja/g++.oliva/ns3.C b/gcc/testsuite/g++.old-deja/g++.oliva/ns3.C new file mode 100644 index 000000000..4ddbb3289 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.oliva/ns3.C @@ -0,0 +1,13 @@ +// { dg-do assemble } + +// Copyright (C) 1999 Free Software Foundation + +// by Alexandre Oliva +// based on bug report by Ovidiu Toader + + +namespace N { + template class A { + template friend class A; + }; +} diff --git a/gcc/testsuite/g++.old-deja/g++.oliva/overload1.C b/gcc/testsuite/g++.old-deja/g++.oliva/overload1.C new file mode 100644 index 000000000..91b3b02a4 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.oliva/overload1.C @@ -0,0 +1,24 @@ +// { dg-do assemble } + +// Copyright (C) 1999 Free Software Foundation + +// by Alexandre Oliva +// Based on bug report by JDonner + +struct foo { + static int bar(); // { dg-error "candidate" } + void bar(int); // { dg-error "foo::bar" } +}; + +/* gcc emits a hard error without -pedantic, and a warning with + -pedantic, even in bad1. */ +int (*ok1)() = foo::bar; +void (foo::*bad1)(int) = foo::bar; // { dg-error "assuming pointer" } +// { dg-message "note" "note" { target *-*-* } 16 } + +int (*ok2)() = &foo::bar; // ok +void (*bad2)(int) = foo::bar; // { dg-error "no matches" } + +void (foo::*ok3)(int) = &foo::bar; // ok +int (foo::*bad3)() = foo::bar; // { dg-error "no matches" } + diff --git a/gcc/testsuite/g++.old-deja/g++.oliva/partord1.C b/gcc/testsuite/g++.old-deja/g++.oliva/partord1.C new file mode 100644 index 000000000..34fe92e64 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.oliva/partord1.C @@ -0,0 +1,28 @@ +// { dg-do assemble } + +// Copyright (C) 1999 Free Software Foundation + +// by Alexandre Oliva + +template void foo(T); +template void foo(T*); + +template class bar { + private: + int i; // { dg-error "" } this variable + friend void foo(T); +}; + +template void foo(T) { + bar().i; // ok, I'm a friend +} +template void foo(T*) { + bar().i; // { dg-error "" } not a friend +} + +int main() { + int j = 0; + foo(j); // calls foo(int), ok + foo(&j); // calls foo(int*) + foo(&j); // calls foo(int*), ok +} diff --git a/gcc/testsuite/g++.old-deja/g++.oliva/partspec1.C b/gcc/testsuite/g++.old-deja/g++.oliva/partspec1.C new file mode 100644 index 000000000..887924781 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.oliva/partspec1.C @@ -0,0 +1,20 @@ +// { dg-do assemble } + +// Copyright (C) 1999 Free Software Foundation + +// by Alexandre Oliva +// simplified from bug report by Andrey Slepuhin + +template struct X; + +int a; + +template +struct X {}; + +int b; + +template +struct X {}; + +X x; diff --git a/gcc/testsuite/g++.old-deja/g++.oliva/stkalign.C b/gcc/testsuite/g++.old-deja/g++.oliva/stkalign.C new file mode 100644 index 000000000..2b24f489e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.oliva/stkalign.C @@ -0,0 +1,18 @@ +// { dg-do assemble } + +// Copyright (C) 2000 Free Software Foundation + +// by Alexandre Oliva +// distilled from libg++'s Fix.cc + + +struct Integer { + ~Integer () {} +}; + +void foo (const Integer& y); +Integer bar (const Integer& x); + +void show (const Integer& x) { + foo (bar (x)); +} diff --git a/gcc/testsuite/g++.old-deja/g++.oliva/template1.C b/gcc/testsuite/g++.old-deja/g++.oliva/template1.C new file mode 100644 index 000000000..ce3949618 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.oliva/template1.C @@ -0,0 +1,15 @@ +// { dg-do assemble } + +// Copyright (C) 1999, 2003 Free Software Foundation + +// by Alexandre Oliva +// based on bug report by Stefan Wetzel + + +template struct foo { + static void bar(double (*)[dim]) {} // { dg-error "'dim' was not declared" } +}; + +void bar() { + foo<>::bar(0); +} diff --git a/gcc/testsuite/g++.old-deja/g++.oliva/template10.C b/gcc/testsuite/g++.old-deja/g++.oliva/template10.C new file mode 100644 index 000000000..5c1204bdd --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.oliva/template10.C @@ -0,0 +1,22 @@ +// { dg-do assemble } + +// Copyright (C) 1999 Free Software Foundation + +// by Alexandre Oliva +// bug report by Martin Sebor +// based on C++ Standard example in [temp.expl.spec]/5 + +/* Members of explicitly specialized template classes shall not be + defined with template-specialization syntax. The example in the + Standard contains a definition of a member function of the + explicitly specialized class template, but the paragraph refers to + members in general, not only member functions. */ + +template struct A {}; + +template<> struct A { + static bool a, b; +}; + +bool A::a = true; // ok +template<> bool A::b = false; // { dg-error "template header" } diff --git a/gcc/testsuite/g++.old-deja/g++.oliva/template2.C b/gcc/testsuite/g++.old-deja/g++.oliva/template2.C new file mode 100644 index 000000000..359e9b465 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.oliva/template2.C @@ -0,0 +1,14 @@ +// { dg-do assemble } + +// Copyright (C) 1999 Free Software Foundation + +// by Alexandre Oliva +// based on bug report by Gabriel Dos_Reis + +template