summaryrefslogtreecommitdiff
path: root/gcc/testsuite
diff options
context:
space:
mode:
authorzlaski <zlaski@138bc75d-0d04-0410-961f-82ee72b054a4>2002-08-20 01:27:39 +0000
committerzlaski <zlaski@138bc75d-0d04-0410-961f-82ee72b054a4>2002-08-20 01:27:39 +0000
commit06ab76a192970fe04c184970356387d4d26ad383 (patch)
tree5bfe74464a81284da9557cd95333dffa30318d52 /gcc/testsuite
parent72d3c9a06dfc8227e1490f9e3d204101cb270e78 (diff)
downloadgcc-06ab76a192970fe04c184970356387d4d26ad383.tar.gz
[gcc]
2002-08-19 Ziemowit Laski <zlaski@apple.com> * objc/objc-act.c (build_ivar_chain): Remove. (objc_copy_list): Likewise. (get_class_ivars): Inline call to removed build_ivar_chain function. Save off a clean copy of ivars in the CLASS_OWN_IVARS slot; use that slot (rather than CLASS_IVARS) when accessing ivars for base classes. Call copy_list and chainon instead of objc_copy_list. (build_private_template): Call get_class_ivars instead of build_ivar_chain. (start_class): Allocate room for the CLASS_OWN_IVARS slot. (continue_class): Call get_class_ivars instead of build_ivar_chain. (encode_field_decl): Check for DECL_BIT_FIELD_TYPE instead of DECL_BIT_FIELD (which may have been cleared). * objc/objc-act.h (CLASS_OWN_IVARS): New accessor macro. [gcc/testsuite] 2002-08-19 Ziemowit Laski <zlaski@apple.com> * objc.dg/bitfield-1.m: New test. * objc.dg/bitfield-2.m: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@56451 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/testsuite')
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/objc.dg/bitfield-1.m80
-rw-r--r--gcc/testsuite/objc.dg/bitfield-2.m55
3 files changed, 140 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index dad59ab4d4a..775dcb0e016 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2002-08-19 Ziemowit Laski <zlaski@apple.com>
+
+ * objc.dg/bitfield-1.m: New test.
+ * objc.dg/bitfield-2.m: New test.
+
2002-08-17 Joseph S. Myers <jsm@polyomino.org.uk>
* gcc.dg/c90-flex-array-1.c, gcc.dg/c99-flex-array-3.c,
diff --git a/gcc/testsuite/objc.dg/bitfield-1.m b/gcc/testsuite/objc.dg/bitfield-1.m
new file mode 100644
index 00000000000..8791eb33e14
--- /dev/null
+++ b/gcc/testsuite/objc.dg/bitfield-1.m
@@ -0,0 +1,80 @@
+/* Check if bitfield ivars are inherited correctly (i.e., without
+ being "promoted" to ints). */
+/* Contributed by Ziemowit Laski <zlaski@apple.com>. */
+/* { dg-do run } */
+
+#include <objc/objc.h>
+#include <objc/Object.h>
+
+extern void abort(void);
+
+#define CHECK_IF(expr) if(!(expr)) abort();
+
+@interface Base: Object
+{
+ int full;
+ int full2: 32;
+ int _refs: 8;
+ int field2: 3;
+ unsigned f3: 8;
+ short cc;
+ unsigned g: 16;
+ int r2: 8;
+ int r3: 8;
+ int r4: 2;
+ int r5: 8;
+ char c;
+}
+- (void)setValues;
+@end
+
+@interface Derived: Base
+{
+ char d;
+ int _field3: 6;
+}
+- (void)checkValues;
+@end
+
+@implementation Base
+-(void)setValues {
+ full = 1;
+ full2 = 2;
+ _refs = 3;
+ field2 = 1;
+ f3 = 6;
+ cc = 7;
+ g = 8;
+ r2 = 9;
+ r3 = 10;
+ r4 = 1;
+ r5 = 12;
+ c = 13;
+}
+@end
+
+@implementation Derived
+-(void)checkValues {
+ CHECK_IF(full == 1);
+ CHECK_IF(full2 == 2);
+ CHECK_IF(_refs == 3);
+ CHECK_IF(field2 == 1);
+ CHECK_IF(f3 == 6);
+ CHECK_IF(cc == 7);
+ CHECK_IF(g == 8);
+ CHECK_IF(r2 == 9);
+ CHECK_IF(r3 == 10);
+ CHECK_IF(r4 == 1);
+ CHECK_IF(r5 == 12);
+ CHECK_IF(c == 13);
+}
+@end
+
+int main(void) {
+ Derived *obj = [[Derived alloc] init];
+
+ [obj setValues];
+ [obj checkValues];
+
+ return 0;
+}
diff --git a/gcc/testsuite/objc.dg/bitfield-2.m b/gcc/testsuite/objc.dg/bitfield-2.m
new file mode 100644
index 00000000000..25a48625c6b
--- /dev/null
+++ b/gcc/testsuite/objc.dg/bitfield-2.m
@@ -0,0 +1,55 @@
+/* Check if bitfield ivars are correctly @encode'd when
+ the NeXT runtime is used. */
+/* Contributed by Ziemowit Laski <zlaski@apple.com>. */
+/* { dg-options "-fnext-runtime" } */
+/* { dg-do run } */
+
+struct objc_object { struct objc_class *class_pointer; } *id;
+
+extern void abort(void);
+extern int strcmp(const char *, const char *);
+
+#define CHECK_IF(expr) if(!(expr)) abort();
+
+@interface Base
+{
+ struct objc_class *isa;
+ int full;
+ int full2: 32;
+ int _refs: 8;
+ int field2: 3;
+ unsigned f3: 8;
+ short cc;
+ unsigned g: 16;
+ int r2: 8;
+ int r3: 8;
+ int r4: 2;
+ int r5: 8;
+ char c;
+}
+@end
+
+@interface Derived: Base
+{
+ char d;
+ int _field3: 6;
+}
+@end
+
+@implementation Base
+@end
+
+@implementation Derived
+@end
+
+int main(void) {
+ const char *s1r = "{Base=#ib32b8b3b8sb16b8b8b2b8c}";
+ const char *s1 = @encode(Base);
+ const char *s2r = "{Derived=#ib32b8b3b8sb16b8b8b2b8ccb6}";
+ const char *s2 = @encode(Derived);
+
+ CHECK_IF(!strcmp(s1r, s1));
+ CHECK_IF(!strcmp(s2r, s2));
+
+ return 0;
+}