[llvm-commits] [llvm-gcc-4.2] r54399 - in /llvm-gcc-4.2/trunk/gcc/testsuite: g++.apple/block-blocks-test-2.C g++.apple/block-blocks-test-3.C gcc.apple/block-blocks-test-1.c gcc.apple/block-blocks-test-2.c gcc.apple/block-blocks-test-3.c gcc.apple/block-blocks-test-4.c gcc.apple/block-blocks-test-5.c gcc.apple/block-blocks-test-6.c gcc.apple/block-blocks-test-7.c gcc.apple/block-blocks-test-8.c
Bill Wendling
isanbard at gmail.com
Tue Aug 5 22:57:28 PDT 2008
Author: void
Date: Wed Aug 6 00:57:28 2008
New Revision: 54399
URL: http://llvm.org/viewvc/llvm-project?rev=54399&view=rev
Log:
Adding blocks tests from Apple GCC mainline
Added:
llvm-gcc-4.2/trunk/gcc/testsuite/g++.apple/block-blocks-test-2.C
llvm-gcc-4.2/trunk/gcc/testsuite/g++.apple/block-blocks-test-3.C
llvm-gcc-4.2/trunk/gcc/testsuite/gcc.apple/block-blocks-test-1.c
llvm-gcc-4.2/trunk/gcc/testsuite/gcc.apple/block-blocks-test-2.c
llvm-gcc-4.2/trunk/gcc/testsuite/gcc.apple/block-blocks-test-3.c
llvm-gcc-4.2/trunk/gcc/testsuite/gcc.apple/block-blocks-test-4.c
llvm-gcc-4.2/trunk/gcc/testsuite/gcc.apple/block-blocks-test-5.c
llvm-gcc-4.2/trunk/gcc/testsuite/gcc.apple/block-blocks-test-6.c
llvm-gcc-4.2/trunk/gcc/testsuite/gcc.apple/block-blocks-test-7.c
llvm-gcc-4.2/trunk/gcc/testsuite/gcc.apple/block-blocks-test-8.c
Added: llvm-gcc-4.2/trunk/gcc/testsuite/g++.apple/block-blocks-test-2.C
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/testsuite/g%2B%2B.apple/block-blocks-test-2.C?rev=54399&view=auto
==============================================================================
--- llvm-gcc-4.2/trunk/gcc/testsuite/g++.apple/block-blocks-test-2.C (added)
+++ llvm-gcc-4.2/trunk/gcc/testsuite/g++.apple/block-blocks-test-2.C Wed Aug 6 00:57:28 2008
@@ -0,0 +1,19 @@
+/* APPLE LOCAL file 5932809 */
+/* { dg-options "-fblocks" } */
+/* { dg-do run } */
+
+#include <stdio.h>
+
+int main() {
+ __byref int X = 1234;
+ __byref const char * message = "HELLO";
+
+ X = X - 1234;
+
+ X += 1;
+
+ printf ("%s(%d)\n", message, X);
+ X -= 1;
+
+ return X;
+}
Added: llvm-gcc-4.2/trunk/gcc/testsuite/g++.apple/block-blocks-test-3.C
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/testsuite/g%2B%2B.apple/block-blocks-test-3.C?rev=54399&view=auto
==============================================================================
--- llvm-gcc-4.2/trunk/gcc/testsuite/g++.apple/block-blocks-test-3.C (added)
+++ llvm-gcc-4.2/trunk/gcc/testsuite/g++.apple/block-blocks-test-3.C Wed Aug 6 00:57:28 2008
@@ -0,0 +1,15 @@
+/* APPLE LOCAL file 5932809 */
+/* { dg-options "-fblocks" } */
+/* { dg-do run } */
+
+#include <stdio.h>
+
+int main() {
+ __byref int X = 1234;
+ __byref const char * message = "HELLO\n";
+
+ X = X - 1234;
+
+ printf ("%s\n", message);
+ return X;
+}
Added: llvm-gcc-4.2/trunk/gcc/testsuite/gcc.apple/block-blocks-test-1.c
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/testsuite/gcc.apple/block-blocks-test-1.c?rev=54399&view=auto
==============================================================================
--- llvm-gcc-4.2/trunk/gcc/testsuite/gcc.apple/block-blocks-test-1.c (added)
+++ llvm-gcc-4.2/trunk/gcc/testsuite/gcc.apple/block-blocks-test-1.c Wed Aug 6 00:57:28 2008
@@ -0,0 +1,15 @@
+/* APPLE LOCAL file 5932809 */
+/* { dg-options "-fblocks" } */
+/* { dg-do compile } */
+
+__byref int X; /* { dg-warning "__byref attribute is only allowed on local variables - ignored" } */
+
+int foo(__byref int param) { /* { dg-warning "byref attribute can be specified on variables only - ignored" } */
+ __byref int OK = 1;
+
+ extern __byref double extern_var; /* { dg-warning "__byref attribute is only allowed on local variables - ignored" } */
+ if (X) {
+ static __byref char * pch; /* { dg-warning "__byref attribute is only allowed on local variables - ignored" } */
+ }
+ return OK - 1;
+}
Added: llvm-gcc-4.2/trunk/gcc/testsuite/gcc.apple/block-blocks-test-2.c
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/testsuite/gcc.apple/block-blocks-test-2.c?rev=54399&view=auto
==============================================================================
--- llvm-gcc-4.2/trunk/gcc/testsuite/gcc.apple/block-blocks-test-2.c (added)
+++ llvm-gcc-4.2/trunk/gcc/testsuite/gcc.apple/block-blocks-test-2.c Wed Aug 6 00:57:28 2008
@@ -0,0 +1,20 @@
+/* APPLE LOCAL file 5932809 */
+/* { dg-options "-fblocks" } */
+/* { dg-do run } */
+
+#include <stdio.h>
+void _Block_byref_release(void*src){}
+
+int main() {
+ __byref int X = 1234;
+ __byref const char * message = "HELLO";
+
+ X = X - 1234;
+
+ X += 1;
+
+ printf ("%s(%d)\n", message, X);
+ X -= 1;
+
+ return X;
+}
Added: llvm-gcc-4.2/trunk/gcc/testsuite/gcc.apple/block-blocks-test-3.c
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/testsuite/gcc.apple/block-blocks-test-3.c?rev=54399&view=auto
==============================================================================
--- llvm-gcc-4.2/trunk/gcc/testsuite/gcc.apple/block-blocks-test-3.c (added)
+++ llvm-gcc-4.2/trunk/gcc/testsuite/gcc.apple/block-blocks-test-3.c Wed Aug 6 00:57:28 2008
@@ -0,0 +1,16 @@
+/* APPLE LOCAL file 5932809 */
+/* { dg-options "-fblocks" } */
+/* { dg-do run } */
+
+#include <stdio.h>
+void _Block_byref_release(void*src){}
+
+int main() {
+ __byref int X = 1234;
+ __byref const char * message = "HELLO\n";
+
+ X = X - 1234;
+
+ printf ("%s\n", message);
+ return X;
+}
Added: llvm-gcc-4.2/trunk/gcc/testsuite/gcc.apple/block-blocks-test-4.c
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/testsuite/gcc.apple/block-blocks-test-4.c?rev=54399&view=auto
==============================================================================
--- llvm-gcc-4.2/trunk/gcc/testsuite/gcc.apple/block-blocks-test-4.c (added)
+++ llvm-gcc-4.2/trunk/gcc/testsuite/gcc.apple/block-blocks-test-4.c Wed Aug 6 00:57:28 2008
@@ -0,0 +1,17 @@
+/* APPLE LOCAL file 5932809 */
+/* { dg-options "-fblocks" } */
+/* { dg-do run } */
+
+#include <stdio.h>
+void * _NSConcreteStackBlock;
+void _Block_byref_assign_copy(void * dst, void *src){}
+void _Block_byref_release(void*src){}
+
+int main() {
+ __byref int X = 1234;
+
+ int (^CP)(void) = ^{ |X| X = X+1; return X; }; /* { dg-warning "has been deprecated in blocks" } */
+ CP();
+ printf ("X = %d\n", X);
+ return X - 1235;
+}
Added: llvm-gcc-4.2/trunk/gcc/testsuite/gcc.apple/block-blocks-test-5.c
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/testsuite/gcc.apple/block-blocks-test-5.c?rev=54399&view=auto
==============================================================================
--- llvm-gcc-4.2/trunk/gcc/testsuite/gcc.apple/block-blocks-test-5.c (added)
+++ llvm-gcc-4.2/trunk/gcc/testsuite/gcc.apple/block-blocks-test-5.c Wed Aug 6 00:57:28 2008
@@ -0,0 +1,38 @@
+/* APPLE LOCAL file 5932809 */
+/* { dg-options "-fblocks" } */
+/* { dg-do run } */
+
+#include <stdio.h>
+void * _NSConcreteStackBlock;
+void _Block_byref_assign_copy(void * dst, void *src){}
+void _Block_byref_release(void*src){}
+extern void exit(int);
+
+typedef double (^myblock)(int);
+
+
+double test(myblock I) {
+ return I(42);
+}
+
+int main() {
+ int x = 1;
+ __byref int y = 2;
+ __byref br_x;
+ int y1;
+ double res = test(^(int z){|y| y = x+z; return (double)x; }); /* { dg-warning "has been deprecated in blocks" } */
+ printf("result = %f x = %d y = %d\n", res, x, y);
+ if (x != 1 || y != 43)
+ exit(1);
+
+ br_x = x;
+ y1 = y;
+
+ res = test(^(int z){|br_x| br_x = br_x+z; return (double)y1; }); /* { dg-warning "has been deprecated in blocks" } */
+ printf("result = %f br_x = %d y1 = %d\n", res, br_x, y1);
+ if (br_x != 43 || y1 != 43)
+ exit(1);
+
+ return 0;
+}
+
Added: llvm-gcc-4.2/trunk/gcc/testsuite/gcc.apple/block-blocks-test-6.c
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/testsuite/gcc.apple/block-blocks-test-6.c?rev=54399&view=auto
==============================================================================
--- llvm-gcc-4.2/trunk/gcc/testsuite/gcc.apple/block-blocks-test-6.c (added)
+++ llvm-gcc-4.2/trunk/gcc/testsuite/gcc.apple/block-blocks-test-6.c Wed Aug 6 00:57:28 2008
@@ -0,0 +1,32 @@
+/* APPLE LOCAL file 5932809 */
+/* { dg-options "-fblocks" } */
+/* { dg-do run } */
+
+#include <stdio.h>
+void * _NSConcreteStackBlock;
+void _Block_byref_assign_copy(void * dst, void *src){}
+void _Block_byref_release(void*src){}
+extern void exit(int);
+
+typedef double (^myblock)(int);
+
+
+double test(myblock I) {
+ return I(42);
+}
+
+int main() {
+ __byref int x = 1;
+ __byref int y = 2;
+ double res = test(^(int z){|y| y = x+z; return (double)x; }); /* { dg-warning "has been deprecated in blocks" } */
+ printf("result = %f x = %d y = %d\n", res, x, y);
+ if (x != 1 || y != 43)
+ exit(1);
+
+ res = test(^(int z){|x| x = x+z; return (double)y; }); /* { dg-warning "has been deprecated in blocks" } */
+ printf("result = %f x = %d y = %d\n", res, x, y);
+ if (x != 43 || y != 43)
+ exit(1);
+ return 0;
+}
+
Added: llvm-gcc-4.2/trunk/gcc/testsuite/gcc.apple/block-blocks-test-7.c
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/testsuite/gcc.apple/block-blocks-test-7.c?rev=54399&view=auto
==============================================================================
--- llvm-gcc-4.2/trunk/gcc/testsuite/gcc.apple/block-blocks-test-7.c (added)
+++ llvm-gcc-4.2/trunk/gcc/testsuite/gcc.apple/block-blocks-test-7.c Wed Aug 6 00:57:28 2008
@@ -0,0 +1,41 @@
+/* APPLE LOCAL file radar 5932809 */
+/* { dg-do run } */
+/* { dg-options "-mmacosx-version-min=10.5 -ObjC -lobjc" { target *-*-darwin* } } */
+
+#include <stdio.h>
+
+void * _NSConcreteStackBlock;
+void _Block_byref_assign_copy(void * dst, void *src){}
+void _Block_byref_release(void*src){}
+
+
+int i;
+
+int foo() {
+ __byref id FFFFFF;
+ __byref id Q;
+ ^{ |FFFFFF| FFFFFF = 0; }; /* { dg-warning "has been deprecated in blocks" } */
+
+ if (i)
+ {
+ __byref id FFFFFF;
+ __byref id Q;
+ ^{ |FFFFFF| FFFFFF = 0; }; /* { dg-warning "has been deprecated in blocks" } */
+ }
+}
+
+int main() {
+ __byref id X;
+ __byref id X1;
+ ^{ |X| X = 0; }; /* { dg-warning "has been deprecated in blocks" } */
+
+ if (i)
+ {
+ __byref id X;
+ __byref id X1;
+ ^{ |X| X = 0; }; /* { dg-warning "has been deprecated in blocks" } */
+ }
+ return 0;
+}
+
+
Added: llvm-gcc-4.2/trunk/gcc/testsuite/gcc.apple/block-blocks-test-8.c
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/testsuite/gcc.apple/block-blocks-test-8.c?rev=54399&view=auto
==============================================================================
--- llvm-gcc-4.2/trunk/gcc/testsuite/gcc.apple/block-blocks-test-8.c (added)
+++ llvm-gcc-4.2/trunk/gcc/testsuite/gcc.apple/block-blocks-test-8.c Wed Aug 6 00:57:28 2008
@@ -0,0 +1,123 @@
+/* APPLE LOCAL file radar 5932809 */
+/* Test the __byreg runtime features. */
+/* { dg-options "-mmacosx-version-min=10.5 -ObjC -framework Foundation" { target i?86-*-darwin* } } */
+/* { dg-do run { target i?86-*-darwin* } } */
+/* { dg-skip-if "" { *-*-darwin* } { "-m64" } { "" } } */
+
+#import <Foundation/Foundation.h>
+
+void * _NSConcreteStackBlock;
+
+int CalledRetain = 0;
+
+id objc_msgSend(id target, SEL cmd) {
+ printf("[%p %s] called\n", target, sel_getName(cmd));
+ if (!strcmp(sel_getName(cmd), "retain")) {
+ CalledRetain = 1;
+ }
+ return target;
+}
+
+ at interface DumbObject {
+ at public
+ id isa;
+}
+ at end
+id newDumbObject() {
+ DumbObject *result = (DumbObject *)calloc(sizeof(DumbObject), 1);
+ result->isa = objc_getClass("DumbObject");
+ return result;
+}
+
+ at implementation DumbObject
++ new {
+ return newDumbObject();
+}
++ (void) initialize { }
+- forward:(SEL)msg :(long *)params {
+ printf("forward:: with %s called\n", sel_getName(msg));
+ return self;
+}
+ at end
+
+//#include <Block_private.h>
+
+enum {
+ BLOCK_NEEDS_FREE = (1 << 24),
+ BLOCK_HAS_COPY_DISPOSE = (1 << 25),
+ BLOCK_NO_COPY = (1 << 26), // interim byref: no copies allowed
+ BLOCK_IS_GC = (1 << 27),
+};
+
+struct Block_basic {
+ void *isa;
+ int Block_flags; // int32_t
+ int Block_size; // XXX should be packed into Block_flags
+ void (*Block_invoke)(void *);
+ void (*Block_copy)(void *dst, void *src);
+ void (*Block_dispose)(void *);
+ //long params[0]; // generic space for const & byref hidden params, return value, variable on needs of course
+};
+struct Block_byref {
+ //long reserved;
+ struct Block_byref *forwarding;
+ int flags;//refcount;
+ int size;
+ void (*byref_keep)(struct Block_byref *dst, struct Block_byref *src);
+ void (*byref_destroy)(struct Block_byref *);
+ // long shared[0];
+};
+
+
+int ByrefAssignCopy = 0;
+
+void _Block_byref_assign_copy(void *destp, void *source) {
+ struct Block_byref *src = (struct Block_byref *)source;
+ ByrefAssignCopy = 1;
+ // lets look at the Block_byref
+ if ((src->flags & BLOCK_HAS_COPY_DISPOSE) == 0) {
+ printf("byref data block does not have bit saying that copy/dispose helper routines are present\n");
+ return;
+ }
+ printf("calling out to byref copy helper at %p\n", src->byref_keep);
+ int junk[100];
+ src->byref_keep((struct Block_byref *)junk, src);
+}
+
+void _Block_byref_release(void *source) {
+ struct Block_byref *src = source;
+ src->byref_destroy(src);
+}
+
+int main(int argc, char *argv[]) {
+ id __byref dumbo = newDumbObject(); //[DumbObject new];
+ void (^dummy)(void) = ^{ | dumbo | /* { dg-warning "has been deprecated in blocks" } */
+ [dumbo self];
+ };
+
+ struct Block_basic *aBlock = (struct Block_basic *)(void *)dummy;
+ if ((aBlock->Block_flags & BLOCK_HAS_COPY_DISPOSE) == 0) {
+ printf("Block should have a NON_POD copy/destroy helpers and flags to say so, but doesn't\n");
+ return 1;
+ }
+
+ char result[200];
+ printf("calling out to copy support helper at %p\n", aBlock->Block_copy);
+ (*aBlock->Block_copy)(result, aBlock); // do fixup
+
+ // The copy/destroy helper should have had a callout to _Block_byref_assign_copy for its byref block
+ if (! ByrefAssignCopy) {
+ printf("_Block_copy_assign not called\n");
+ return 1;
+ }
+
+ // the copy/destroy helper of the byref should have done dst->object = [src->object retain]
+ if (! CalledRetain) {
+ printf("byref block support helper did not call retain\n");
+ return 1;
+ }
+
+ (*aBlock->Block_dispose)(aBlock);
+
+ return 0;
+}
More information about the llvm-commits
mailing list