From 96a1e32dcdf973cab1c308cfcdfcf6f07444b2cc Mon Sep 17 00:00:00 2001 From: Nathan Sidwell Date: Thu, 11 Jan 2001 12:29:20 +0000 Subject: call.c (convert_default_arg): Check for unprocessed DEFAULT_ARG. cp: * call.c (convert_default_arg): Check for unprocessed DEFAULT_ARG. * cp-tree.h (replace_defarg): Move to spew.c. (maybe_snarf_defarg, add_defarg_fn, do_pending_defargs): Move to spew.c, which is where they really are. (done_pending_defargs): Declare. (unprocessed_defarg_fn): Declare. * decl.c (replace_defarg): Move to spew.c * parse.y (structsp): Call done_pending_defargs. * spew.c (defarg_fns): Rearrange list structure. (defarg_fnsdone): New static variable. (defarg_depfns): New static variable. (init_spew): Adjust. (add_defarg_fn): Store the type in TREE_TYPE. (do_pending_defargs): Detect and deal with ordering constraints and circularity. (done_pending_defargs): New function. (unprocessed_defarg_fn): New function. (replace_defarg): Moved from decl.c. Robustify. Don't save if circularity detected. testsuite: * g++.old-deja/g++.other/defarg7.C: New test. * g++.old-deja/g++.other/defarg8.C: New test. From-SVN: r38903 --- gcc/testsuite/ChangeLog | 9 ++++++ gcc/testsuite/g++.old-deja/g++.other/defarg7.C | 41 ++++++++++++++++++++++++++ gcc/testsuite/g++.old-deja/g++.other/defarg8.C | 24 +++++++++++++++ 3 files changed, 74 insertions(+) create mode 100644 gcc/testsuite/g++.old-deja/g++.other/defarg7.C create mode 100644 gcc/testsuite/g++.old-deja/g++.other/defarg8.C (limited to 'gcc/testsuite') diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a87cf88..4e44d8e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,14 @@ 2001-01-11 Nathan Sidwell + * g++.old-deja/g++.other/defarg7.C: New test. + * g++.old-deja/g++.other/defarg8.C: New test. + +2001-01-11 Nathan Sidwell + + * g++.old-deja/g++.pt/crash64.C: New test. + +2001-01-11 Nathan Sidwell + * g++.old-deja/g++.pt/crash63.C: New test. 2001-01-11 Neil Booth diff --git a/gcc/testsuite/g++.old-deja/g++.other/defarg7.C b/gcc/testsuite/g++.old-deja/g++.other/defarg7.C new file mode 100644 index 0000000..cb5a6da --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.other/defarg7.C @@ -0,0 +1,41 @@ +// Build don't link: + +// Copyright (C) 2000 Free Software Foundation, Inc. +// Contributed by Nathan Sidwell 7 Jan 2001 + +// Bug 1038. Default args on class members can produce circular dependencies. +// Make sure we spot them, and don't depend on a particular ordering. + +struct A +{ + static int Foo (int = Baz ()); // WARNING - circular + static int Baz (int = Foo ()); // WARNING - circular +}; + +struct Test +{ + Test (void * = 0); + void set (const Test &arg = Test ()); +}; + +struct B +{ + static int Bar (int = Foo (1)); + static int Foo (int = Baz ()); + static int Baz (int = Foo (1)); +}; + +int main () +{ + Test t; + t.set (); + t.set (t); + B::Bar (); + B::Bar (1); + B::Baz (); + B::Baz (1); + B::Foo (); + B::Foo (1); + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.other/defarg8.C b/gcc/testsuite/g++.old-deja/g++.other/defarg8.C new file mode 100644 index 0000000..7188209 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.other/defarg8.C @@ -0,0 +1,24 @@ +// Build don't link: +// Special g++ options: -pedantic-errors -ansi -w + +// Copyright (C) 2000 Free Software Foundation, Inc. +// Contributed by Nathan Sidwell 7 Jan 2001 + +// Bug 1038. Default args on class members can produce circular dependencies. +// Make sure we spot them, and don't depend on a particular ordering. + +struct AA +{ + static int Foo (int = Baz ()); // ERROR - candidate + static int Baz (int = Foo ()); // ERROR - candidate +}; + +int main () +{ + AA::Foo (); // ERROR - no candidate + AA::Foo (1); + AA::Baz (); // ERROR - no candidate + AA::Baz (1); + + return 0; +} -- cgit v1.1