diff options
author | Nathan Sidwell <nathan@codesourcery.com> | 2001-01-11 12:29:20 +0000 |
---|---|---|
committer | Nathan Sidwell <nathan@gcc.gnu.org> | 2001-01-11 12:29:20 +0000 |
commit | 96a1e32dcdf973cab1c308cfcdfcf6f07444b2cc (patch) | |
tree | ec5b5da0d3a77d08ddf43c7b5c39291e71111bc5 /gcc/testsuite | |
parent | 34e225a30bcb010bc46846eb3ea6ad9e1321034d (diff) | |
download | gcc-96a1e32dcdf973cab1c308cfcdfcf6f07444b2cc.zip gcc-96a1e32dcdf973cab1c308cfcdfcf6f07444b2cc.tar.gz gcc-96a1e32dcdf973cab1c308cfcdfcf6f07444b2cc.tar.bz2 |
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
Diffstat (limited to 'gcc/testsuite')
-rw-r--r-- | gcc/testsuite/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/testsuite/g++.old-deja/g++.other/defarg7.C | 41 | ||||
-rw-r--r-- | gcc/testsuite/g++.old-deja/g++.other/defarg8.C | 24 |
3 files changed, 74 insertions, 0 deletions
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 <nathan@codesourcery.com> + * g++.old-deja/g++.other/defarg7.C: New test. + * g++.old-deja/g++.other/defarg8.C: New test. + +2001-01-11 Nathan Sidwell <nathan@codesourcery.com> + + * g++.old-deja/g++.pt/crash64.C: New test. + +2001-01-11 Nathan Sidwell <nathan@codesourcery.com> + * g++.old-deja/g++.pt/crash63.C: New test. 2001-01-11 Neil Booth <neil@daikokuya.demon.co.uk> 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 <nathan@codesourcery.com> + +// 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 <nathan@codesourcery.com> + +// 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; +} |