summaryrefslogtreecommitdiff
path: root/gcc/testsuite/g++.old-deja/g++.law/scope2.C
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/g++.old-deja/g++.law/scope2.C')
-rw-r--r--gcc/testsuite/g++.old-deja/g++.law/scope2.C45
1 files changed, 45 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.old-deja/g++.law/scope2.C b/gcc/testsuite/g++.old-deja/g++.law/scope2.C
new file mode 100644
index 000000000..13c02c2ae
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.law/scope2.C
@@ -0,0 +1,45 @@
+// { dg-do run }
+// GROUPS passed scoping
+// scoping file
+// From: svkakkad@cs.utexas.edu (Sheetal V. Kakkad)
+// Date: Tue, 5 Oct 93 12:38:49 -0500
+// Subject: G++ 2.4.5 - global delete operator not called when using "::delete"
+// Message-ID: <9310051738.AA14586@boogie.cs.utexas.edu>
+
+#include <stdio.h>
+#include <stddef.h>
+#include <stdlib.h>
+
+class foo
+{
+ public:
+ foo () { ; }
+ ~foo () { ; }
+ void *operator new (size_t);
+ void operator delete (void *);
+};
+
+void *foo::operator new (size_t size)
+{
+ return malloc (size);
+}
+
+int overloaded_delete = 0;
+
+void foo::operator delete (void *data)
+{
+ free ((char *) data);
+ overloaded_delete++;
+}
+
+int main ()
+{
+ foo *f = new foo;
+ foo *ff = ::new foo;
+ ::delete ff; // should call the default delete operator
+ delete f;
+ if (overloaded_delete == 1)
+ printf ("PASS\n");
+ else
+ { printf ("FAIL\n"); return 1; }
+}