summaryrefslogtreecommitdiff
path: root/gcc/testsuite/objc
diff options
context:
space:
mode:
authorlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>1998-09-02 23:43:53 +0000
committerlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>1998-09-02 23:43:53 +0000
commitff79b0cf7660dfd068a1b0a08a865c881d55259d (patch)
tree6cfdb9bd065eef7534da1b9908a26bfd59f8a188 /gcc/testsuite/objc
parenta95c0bd15ec9aa8b0004994564f48d57f6aba207 (diff)
downloadgcc-ff79b0cf7660dfd068a1b0a08a865c881d55259d.tar.gz
* lib/{objc.exp,objc-torture.exp}: New files for objc testing harness.
* objc: ObjC testsuite. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@22198 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/testsuite/objc')
-rw-r--r--gcc/testsuite/objc/execute/bf-1.m24
-rw-r--r--gcc/testsuite/objc/execute/bf-10.m22
-rw-r--r--gcc/testsuite/objc/execute/bf-11.m23
-rw-r--r--gcc/testsuite/objc/execute/bf-12.m23
-rw-r--r--gcc/testsuite/objc/execute/bf-13.m25
-rw-r--r--gcc/testsuite/objc/execute/bf-14.m25
-rw-r--r--gcc/testsuite/objc/execute/bf-15.m25
-rw-r--r--gcc/testsuite/objc/execute/bf-16.m26
-rw-r--r--gcc/testsuite/objc/execute/bf-17.m25
-rw-r--r--gcc/testsuite/objc/execute/bf-18.m17
-rw-r--r--gcc/testsuite/objc/execute/bf-19.m17
-rw-r--r--gcc/testsuite/objc/execute/bf-2.m24
-rw-r--r--gcc/testsuite/objc/execute/bf-3.m24
-rw-r--r--gcc/testsuite/objc/execute/bf-4.m24
-rw-r--r--gcc/testsuite/objc/execute/bf-5.m22
-rw-r--r--gcc/testsuite/objc/execute/bf-6.m22
-rw-r--r--gcc/testsuite/objc/execute/bf-7.m22
-rw-r--r--gcc/testsuite/objc/execute/bf-8.m22
-rw-r--r--gcc/testsuite/objc/execute/bf-9.m23
-rw-r--r--gcc/testsuite/objc/execute/bf-common.h76
-rw-r--r--gcc/testsuite/objc/execute/execute.exp42
21 files changed, 553 insertions, 0 deletions
diff --git a/gcc/testsuite/objc/execute/bf-1.m b/gcc/testsuite/objc/execute/bf-1.m
new file mode 100644
index 00000000000..9a533a39b52
--- /dev/null
+++ b/gcc/testsuite/objc/execute/bf-1.m
@@ -0,0 +1,24 @@
+#include <objc/objc.h>
+#include <objc/objc-api.h>
+#include <objc/Object.h>
+
+@interface MyObject
+{
+ Class isa;
+ float f;
+ char a;
+ struct {
+ int i:2;
+ int j:3;
+ int k:12;
+ } flags;
+ char c;
+// void *pointer;
+}
+@end
+
+@implementation MyObject
+@end
+
+#include "bf-common.h"
+
diff --git a/gcc/testsuite/objc/execute/bf-10.m b/gcc/testsuite/objc/execute/bf-10.m
new file mode 100644
index 00000000000..77076da51ed
--- /dev/null
+++ b/gcc/testsuite/objc/execute/bf-10.m
@@ -0,0 +1,22 @@
+#include <objc/objc.h>
+#include <objc/objc-api.h>
+#include <objc/Object.h>
+
+@interface MyObject
+{
+ Class isa;
+ float f;
+ char a[3];
+ int i:2;
+ int j:6;
+ char c;
+ int k:12;
+ char d;
+}
+@end
+
+@implementation MyObject
+@end
+
+#include "bf-common.h"
+
diff --git a/gcc/testsuite/objc/execute/bf-11.m b/gcc/testsuite/objc/execute/bf-11.m
new file mode 100644
index 00000000000..40d9b533a49
--- /dev/null
+++ b/gcc/testsuite/objc/execute/bf-11.m
@@ -0,0 +1,23 @@
+#include <objc/objc.h>
+#include <objc/objc-api.h>
+#include <objc/Object.h>
+
+@interface MyObject
+{
+ Class isa;
+ float f;
+ char a[3];
+ int i:2;
+ int j:6;
+ short s;
+ int k:12;
+ char d;
+ void *pointer;
+}
+@end
+
+@implementation MyObject
+@end
+
+#include "bf-common.h"
+
diff --git a/gcc/testsuite/objc/execute/bf-12.m b/gcc/testsuite/objc/execute/bf-12.m
new file mode 100644
index 00000000000..9e0a989ee75
--- /dev/null
+++ b/gcc/testsuite/objc/execute/bf-12.m
@@ -0,0 +1,23 @@
+#include <objc/objc.h>
+#include <objc/objc-api.h>
+#include <objc/Object.h>
+
+@interface MyObject
+{
+ Class isa;
+ float f;
+ char a[3];
+ int i:2;
+ int j:6;
+ int s;
+ int k:12;
+ char d;
+ void *pointer;
+}
+@end
+
+@implementation MyObject
+@end
+
+#include "bf-common.h"
+
diff --git a/gcc/testsuite/objc/execute/bf-13.m b/gcc/testsuite/objc/execute/bf-13.m
new file mode 100644
index 00000000000..f8349338b53
--- /dev/null
+++ b/gcc/testsuite/objc/execute/bf-13.m
@@ -0,0 +1,25 @@
+#include <objc/objc.h>
+#include <objc/objc-api.h>
+#include <objc/Object.h>
+
+@interface MyObject
+{
+ Class isa;
+ float f;
+ char a[3];
+ struct {
+ int i:2;
+ int j:6;
+ char s;
+ int k:12;
+ } flags;
+ char d;
+ void *pointer;
+}
+@end
+
+@implementation MyObject
+@end
+
+#include "bf-common.h"
+
diff --git a/gcc/testsuite/objc/execute/bf-14.m b/gcc/testsuite/objc/execute/bf-14.m
new file mode 100644
index 00000000000..0ceedc08dd8
--- /dev/null
+++ b/gcc/testsuite/objc/execute/bf-14.m
@@ -0,0 +1,25 @@
+#include <objc/objc.h>
+#include <objc/objc-api.h>
+#include <objc/Object.h>
+
+@interface MyObject
+{
+ Class isa;
+ float f;
+ char a[3];
+ struct {
+ int i:2;
+ int j:6;
+ short s;
+ int k:12;
+ } flags;
+ char d;
+ void *pointer;
+}
+@end
+
+@implementation MyObject
+@end
+
+#include "bf-common.h"
+
diff --git a/gcc/testsuite/objc/execute/bf-15.m b/gcc/testsuite/objc/execute/bf-15.m
new file mode 100644
index 00000000000..e6e7b30607d
--- /dev/null
+++ b/gcc/testsuite/objc/execute/bf-15.m
@@ -0,0 +1,25 @@
+#include <objc/objc.h>
+#include <objc/objc-api.h>
+#include <objc/Object.h>
+
+@interface MyObject
+{
+ Class isa;
+ float f;
+ char a;
+ struct {
+ int i:2;
+ int j:6;
+ int s;
+ int k:12;
+ } flags;
+ char d;
+ void *pointer;
+}
+@end
+
+@implementation MyObject
+@end
+
+#include "bf-common.h"
+
diff --git a/gcc/testsuite/objc/execute/bf-16.m b/gcc/testsuite/objc/execute/bf-16.m
new file mode 100644
index 00000000000..fb8b0c38f51
--- /dev/null
+++ b/gcc/testsuite/objc/execute/bf-16.m
@@ -0,0 +1,26 @@
+#include <objc/objc.h>
+#include <objc/objc-api.h>
+#include <objc/Object.h>
+
+struct A {
+ int i;
+ float f;
+ int a:3;
+ int b:2;
+};
+
+@interface MyObject
+{
+ Class isa;
+ int i;
+ float f[3];
+ struct A a, b;
+ char c;
+}
+@end
+
+@implementation MyObject
+@end
+
+#include "bf-common.h"
+
diff --git a/gcc/testsuite/objc/execute/bf-17.m b/gcc/testsuite/objc/execute/bf-17.m
new file mode 100644
index 00000000000..4c3b854962c
--- /dev/null
+++ b/gcc/testsuite/objc/execute/bf-17.m
@@ -0,0 +1,25 @@
+#include <objc/objc.h>
+#include <objc/objc-api.h>
+#include <objc/Object.h>
+
+struct A {
+ int i;
+ float f;
+ int a:3;
+ int b:2;
+};
+
+@interface MyObject
+{
+ Class isa;
+ int i;
+ float f[3];
+ struct A a;
+}
+@end
+
+@implementation MyObject
+@end
+
+#include "bf-common.h"
+
diff --git a/gcc/testsuite/objc/execute/bf-18.m b/gcc/testsuite/objc/execute/bf-18.m
new file mode 100644
index 00000000000..36a7ea6c61b
--- /dev/null
+++ b/gcc/testsuite/objc/execute/bf-18.m
@@ -0,0 +1,17 @@
+#include <objc/objc.h>
+#include <objc/objc-api.h>
+#include <objc/Object.h>
+
+@interface MyObject
+{
+ Class isa;
+ int i;
+ char c[1];
+}
+@end
+
+@implementation MyObject
+@end
+
+#include "bf-common.h"
+
diff --git a/gcc/testsuite/objc/execute/bf-19.m b/gcc/testsuite/objc/execute/bf-19.m
new file mode 100644
index 00000000000..21775e7c77e
--- /dev/null
+++ b/gcc/testsuite/objc/execute/bf-19.m
@@ -0,0 +1,17 @@
+#include <objc/objc.h>
+#include <objc/objc-api.h>
+#include <objc/Object.h>
+
+@interface MyObject
+{
+ Class isa;
+ unsigned int i;
+ MyObject *object;
+}
+@end
+
+@implementation MyObject
+@end
+
+#include "bf-common.h"
+
diff --git a/gcc/testsuite/objc/execute/bf-2.m b/gcc/testsuite/objc/execute/bf-2.m
new file mode 100644
index 00000000000..eac0931549b
--- /dev/null
+++ b/gcc/testsuite/objc/execute/bf-2.m
@@ -0,0 +1,24 @@
+#include <objc/objc.h>
+#include <objc/objc-api.h>
+#include <objc/Object.h>
+
+@interface MyObject
+{
+ Class isa;
+ float f;
+ char a[3];
+ struct {
+ int i:2;
+ int j:3;
+ int k:12;
+ } flags;
+ char c;
+ void *pointer;
+}
+@end
+
+@implementation MyObject
+@end
+
+#include "bf-common.h"
+
diff --git a/gcc/testsuite/objc/execute/bf-3.m b/gcc/testsuite/objc/execute/bf-3.m
new file mode 100644
index 00000000000..04cf0836faa
--- /dev/null
+++ b/gcc/testsuite/objc/execute/bf-3.m
@@ -0,0 +1,24 @@
+#include <objc/objc.h>
+#include <objc/objc-api.h>
+#include <objc/Object.h>
+
+@interface MyObject
+{
+ Class isa;
+ float f;
+ char a;
+ struct {
+ int i:2;
+ int j:6;
+ int k:12;
+ } flags;
+ char c;
+ void *pointer;
+}
+@end
+
+@implementation MyObject
+@end
+
+#include "bf-common.h"
+
diff --git a/gcc/testsuite/objc/execute/bf-4.m b/gcc/testsuite/objc/execute/bf-4.m
new file mode 100644
index 00000000000..ae8017c688e
--- /dev/null
+++ b/gcc/testsuite/objc/execute/bf-4.m
@@ -0,0 +1,24 @@
+#include <objc/objc.h>
+#include <objc/objc-api.h>
+#include <objc/Object.h>
+
+@interface MyObject
+{
+ Class isa;
+ float f;
+ char a[3];
+ struct {
+ int i:2;
+ int j:6;
+ int k:12;
+ } flags;
+ char c;
+ void *pointer;
+}
+@end
+
+@implementation MyObject
+@end
+
+#include "bf-common.h"
+
diff --git a/gcc/testsuite/objc/execute/bf-5.m b/gcc/testsuite/objc/execute/bf-5.m
new file mode 100644
index 00000000000..e61d71f9ced
--- /dev/null
+++ b/gcc/testsuite/objc/execute/bf-5.m
@@ -0,0 +1,22 @@
+#include <objc/objc.h>
+#include <objc/objc-api.h>
+#include <objc/Object.h>
+
+@interface MyObject
+{
+ Class isa;
+ float f;
+ char a;
+ int i:2;
+ int j:3;
+ int k:12;
+ char c;
+ void *pointer;
+}
+@end
+
+@implementation MyObject
+@end
+
+#include "bf-common.h"
+
diff --git a/gcc/testsuite/objc/execute/bf-6.m b/gcc/testsuite/objc/execute/bf-6.m
new file mode 100644
index 00000000000..38222d3f676
--- /dev/null
+++ b/gcc/testsuite/objc/execute/bf-6.m
@@ -0,0 +1,22 @@
+#include <objc/objc.h>
+#include <objc/objc-api.h>
+#include <objc/Object.h>
+
+@interface MyObject
+{
+ Class isa;
+ float f;
+ char a[3];
+ int i:2;
+ int j:3;
+ int k:12;
+ char c;
+ void *pointer;
+}
+@end
+
+@implementation MyObject
+@end
+
+#include "bf-common.h"
+
diff --git a/gcc/testsuite/objc/execute/bf-7.m b/gcc/testsuite/objc/execute/bf-7.m
new file mode 100644
index 00000000000..80ee6cef763
--- /dev/null
+++ b/gcc/testsuite/objc/execute/bf-7.m
@@ -0,0 +1,22 @@
+#include <objc/objc.h>
+#include <objc/objc-api.h>
+#include <objc/Object.h>
+
+@interface MyObject
+{
+ Class isa;
+ float f;
+ char a;
+ int i:2;
+ int j:6;
+ int k:12;
+ char c;
+ void *pointer;
+}
+@end
+
+@implementation MyObject
+@end
+
+#include "bf-common.h"
+
diff --git a/gcc/testsuite/objc/execute/bf-8.m b/gcc/testsuite/objc/execute/bf-8.m
new file mode 100644
index 00000000000..cc472f96130
--- /dev/null
+++ b/gcc/testsuite/objc/execute/bf-8.m
@@ -0,0 +1,22 @@
+#include <objc/objc.h>
+#include <objc/objc-api.h>
+#include <objc/Object.h>
+
+@interface MyObject
+{
+ Class isa;
+ float f;
+ char a[3];
+ int i:2;
+ int j:6;
+ int k:12;
+ char c;
+ void *pointer;
+}
+@end
+
+@implementation MyObject
+@end
+
+#include "bf-common.h"
+
diff --git a/gcc/testsuite/objc/execute/bf-9.m b/gcc/testsuite/objc/execute/bf-9.m
new file mode 100644
index 00000000000..0f17727d6df
--- /dev/null
+++ b/gcc/testsuite/objc/execute/bf-9.m
@@ -0,0 +1,23 @@
+#include <objc/objc.h>
+#include <objc/objc-api.h>
+#include <objc/Object.h>
+
+@interface MyObject
+{
+ Class isa;
+ float f;
+ char a[3];
+ int i:2;
+ int j:3;
+ char c;
+ int k:12;
+ char d;
+ void *pointer;
+}
+@end
+
+@implementation MyObject
+@end
+
+#include "bf-common.h"
+
diff --git a/gcc/testsuite/objc/execute/bf-common.h b/gcc/testsuite/objc/execute/bf-common.h
new file mode 100644
index 00000000000..123a45413d0
--- /dev/null
+++ b/gcc/testsuite/objc/execute/bf-common.h
@@ -0,0 +1,76 @@
+#include <objc/encoding.h>
+
+
+void print_ivars (Class class)
+{
+ struct objc_ivar_list* ivars = class->ivars;
+ int i;
+
+ for (i = 0; i < ivars->ivar_count; i++) {
+ struct objc_ivar *ivar = &(ivars->ivar_list[i]);
+ printf ("ivar '%s', type '%s', offset %d\n",
+ ivar->ivar_name, ivar->ivar_type, ivar->ivar_offset);
+ }
+}
+
+void compare_structures (Class class, const char* type)
+{
+ struct objc_struct_layout layout;
+ struct objc_ivar_list* ivars = class->ivars;
+ int i = 0;
+ int position;
+
+ objc_layout_structure (type, &layout);
+
+ while (objc_layout_structure_next_member (&layout))
+ {
+ struct objc_ivar *ivar;
+ const char *ivar_type;
+
+ if (i > ivars->ivar_count)
+ {
+ printf ("too many ivars in type %s, layout = %s\n",
+ type, layout.type);
+ exit (1);
+ }
+
+ ivar = &(ivars->ivar_list[i]);
+ objc_layout_structure_get_info (&layout, &position, NULL, &ivar_type);
+ printf ("real ivar '%s' offset %d\n",
+ ivar->ivar_name, ivar->ivar_offset);
+ printf ("computed type '%s' offset %d\n", ivar_type, position);
+ if (position != ivar->ivar_offset)
+ {
+ printf ("offset %d and computed position %d don't match on ivar '%s'"
+ " (i = %d)\n",
+ ivar->ivar_offset, position, ivar->ivar_name, i);
+ exit (1);
+ }
+ i++;
+ }
+
+ printf ("%d ivars checked\n", i);
+}
+
+int main ()
+{
+ struct class_vars
+ {
+ @defs (MyObject);
+ };
+ int size1, size2;
+ Class class = [MyObject class];
+
+ printf ("type = %s\n", @encode (struct class_vars));
+ print_ivars (class);
+
+ compare_structures (class, @encode(struct class_vars));
+ if ((size1 = objc_sizeof_type (@encode(struct class_vars)))
+ != (size2 = sizeof (struct class_vars)))
+ {
+ printf ("sizes don't match (computed %d, exact %d)\n", size1, size2);
+ abort ();
+ }
+
+ exit (0);
+}
diff --git a/gcc/testsuite/objc/execute/execute.exp b/gcc/testsuite/objc/execute/execute.exp
new file mode 100644
index 00000000000..0f598a3c5f4
--- /dev/null
+++ b/gcc/testsuite/objc/execute/execute.exp
@@ -0,0 +1,42 @@
+# Copyright (C) 1991, 1992, 1993, 1995, 1997 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+# Please email any bugs, comments, and/or additions to this file to:
+# bug-gcc@prep.ai.mit.edu
+
+# This file was written by Rob Savoye. (rob@cygnus.com)
+# Modified by Ovidiu Predescu (ovidiu@aracnet.com)
+
+
+if $tracelevel then {
+ strace $tracelevel
+}
+
+# load support procs
+load_lib objc-torture.exp
+
+#
+# main test loop
+#
+
+foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.m]] {
+ # If we're only testing specific files and this isn't one of them, skip it.
+ if ![runtest_file_p $runtests $src] then {
+ continue
+ }
+
+ objc-torture-execute $src
+}