aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite
diff options
context:
space:
mode:
authorNathan Sidwell <nathan@codesourcery.com>2001-01-11 12:29:20 +0000
committerNathan Sidwell <nathan@gcc.gnu.org>2001-01-11 12:29:20 +0000
commit96a1e32dcdf973cab1c308cfcdfcf6f07444b2cc (patch)
treeec5b5da0d3a77d08ddf43c7b5c39291e71111bc5 /gcc/testsuite
parent34e225a30bcb010bc46846eb3ea6ad9e1321034d (diff)
downloadgcc-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/ChangeLog9
-rw-r--r--gcc/testsuite/g++.old-deja/g++.other/defarg7.C41
-rw-r--r--gcc/testsuite/g++.old-deja/g++.other/defarg8.C24
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;
+}