summaryrefslogtreecommitdiff
path: root/gcc/testsuite/obj-c++.dg/const-str-3.mm
diff options
context:
space:
mode:
authorzlaski <zlaski@138bc75d-0d04-0410-961f-82ee72b054a4>2005-06-21 21:13:46 +0000
committerzlaski <zlaski@138bc75d-0d04-0410-961f-82ee72b054a4>2005-06-21 21:13:46 +0000
commit155284b2e1a1cae82d75d55366deef7db9c790e5 (patch)
tree61c56dde40a34c1ff009e67f112f753eeea2695c /gcc/testsuite/obj-c++.dg/const-str-3.mm
parente422fcf3691cb126f18d7cd8539d819580ce362d (diff)
downloadgcc-155284b2e1a1cae82d75d55366deef7db9c790e5.tar.gz
[gcc/testsuite/ChangeLog]
2005-06-21 Ziemowit Laski <zlaski@apple.com> * obj-c++.dg/const-str-[1-9].mm: New tests. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@101237 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/testsuite/obj-c++.dg/const-str-3.mm')
-rw-r--r--gcc/testsuite/obj-c++.dg/const-str-3.mm48
1 files changed, 48 insertions, 0 deletions
diff --git a/gcc/testsuite/obj-c++.dg/const-str-3.mm b/gcc/testsuite/obj-c++.dg/const-str-3.mm
new file mode 100644
index 00000000000..7d4f80863d2
--- /dev/null
+++ b/gcc/testsuite/obj-c++.dg/const-str-3.mm
@@ -0,0 +1,48 @@
+/* Test the -fconstant-string-class=Foo option under the NeXT
+ runtime. */
+/* Developed by Markus Hitter <mah@jump-ing.de>. */
+
+/* { dg-options "-fnext-runtime -fconstant-string-class=Foo -lobjc" } */
+/* { dg-do run { target *-*-darwin* } } */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <memory.h>
+#include <objc/objc.h>
+#include <objc/Object.h>
+
+@interface Foo: Object {
+ char *cString;
+ unsigned int len;
+}
+- (char *)customString;
+@end
+
+struct objc_class _FooClassReference;
+
+@implementation Foo : Object
+- (char *)customString {
+ return cString;
+}
+@end
+
+int main () {
+ Foo *string = @"bla";
+ Foo *string2 = @"bla";
+
+ if(string != string2)
+ abort();
+ printf("Strings are being uniqued properly\n");
+
+ /* This memcpy has to be done before the first message is sent to a
+ constant string object. Can't be moved to +initialize since _that_
+ is already a message. */
+
+ memcpy(&_FooClassReference, objc_getClass("Foo"), sizeof(_FooClassReference));
+ if (strcmp ([string customString], "bla")) {
+ abort ();
+ }
+
+ printf([@"This is a working constant string object\n" customString]);
+ return 0;
+}