[pypy-commit] creflect default: 005d fails

arigo noreply at buildbot.pypy.org
Mon Sep 15 19:43:25 CEST 2014


Author: Armin Rigo <arigo at tunes.org>
Branch: 
Changeset: r37:c6573ab87077
Date: 2014-09-15 19:43 +0200
http://bitbucket.org/cffi/creflect/changeset/c6573ab87077/

Log:	005d fails

diff --git a/creflect/codegen.py b/creflect/codegen.py
--- a/creflect/codegen.py
+++ b/creflect/codegen.py
@@ -32,6 +32,8 @@
         self.sprintfright = msg + self.sprintfright
         if extra:
             assert extralength is not None, "specify 'extralength' explicitly"
+            if self.sprintfright_extra[0]:
+                extra = ', ' + extra
             extra = self.sprintfright_extra[0] + extra
             extralength = self.sprintfright_extra[1] + extralength
             self.sprintfright_extra = (extra, extralength)
diff --git a/creflect/model.py b/creflect/model.py
--- a/creflect/model.py
+++ b/creflect/model.py
@@ -192,15 +192,12 @@
             block.writeline("    r1 = -1;")
             block.writeline("    goto %s;" % block.get_skip_label())
             block.writeline("}")
-        def at_end():
-            outer.codelines.append("a[%d] = (void *)(sizeof(%s) / sizeof(*%s));"
-                                   % (outer.tr.fetch_next_a_index(),
-                                      star_p1, star_p1))
+            block.sprintf_add_right('[%lld]',
+                extra='(long long)(sizeof(%s) / sizeof(*%s))' % (
+                    star_p1, star_p1),
+                extralength=20)
         inspect.levels.append('[]')
         inspect.after_star_p1_assignment.append(after)
-        block.sprintf_add_right('[%lld]',
-            extra='(long long)(sizeof(*p1) / sizeof(**p1))',
-            extralength=20)
         self.item.inspect_type(block, inspect)
 
 
diff --git a/test/codegen/005b.c b/test/codegen/005b.c
--- a/test/codegen/005b.c
+++ b/test/codegen/005b.c
@@ -2,27 +2,59 @@
 
 # ____________________________________________________________
 
-static void __creflect1(void r(char *, void**, int))
+int test005b(char *r)
 {
-    void *a[2];
-    __CREFLECT_PREV(r);
+    int r1 = 0;
+    if (!r)
+        return 57 + 8 + 18 + 36;
     {
         foo_t *p1;
         char *p3;
+        char *r0 = r;
         char b[sizeof(***p1)];  /* check that '*foo_t[]' is a valid type */
         p1 = (void *)&p3;
         if ((void *)p1 != (void *)*p1) {
-            r("E:type 'foo_t' is not an array, but a pointer type", 0, 0);
-            goto f1;
+            r = r0;
+            r += sprintf(r, "#error type 'foo_t' is not an array, but a pointer type\n");
+            r1 = -1;
+            goto f2;
         }
         **p1 = (void *)b;    /* check that 'foo_t[]' is a pointer type */
         (void)(***p1 << 1);  /* check that '*foo_t[]' is an integer type */
+        r += sprintf(r, "typedef ");
         ***p1 = -1;
-        a[0] = (void *)(***p1 > 0 ? sizeof(***p1) : -sizeof(***p1));
-        a[1] = (void *)(sizeof(*p1) / sizeof(**p1));
+        if (***p1 > 0) {
+            if (sizeof(***p1) == 1 && ***p1 == 1)
+                r += sprintf(r, "_Bool");
+            else if (sizeof(***p1) == sizeof(unsigned int))
+                r += sprintf(r, "unsigned int");
+            else if (sizeof(***p1) == sizeof(unsigned short))
+                r += sprintf(r, "unsigned short");
+            else if (sizeof(***p1) == sizeof(unsigned char))
+                r += sprintf(r, "unsigned char");
+            else if (sizeof(***p1) == sizeof(unsigned long))
+                r += sprintf(r, "unsigned long");
+            else if (sizeof(***p1) == sizeof(unsigned long long))
+                r += sprintf(r, "unsigned long long");
+            else
+                r += sprintf(r, "uint%u_t", (int)sizeof(***p1) * 8);
+        }
+        else {
+            if (sizeof(***p1) == sizeof(int))
+                r += sprintf(r, "int");
+            else if (sizeof(***p1) == sizeof(short))
+                r += sprintf(r, "short");
+            else if (sizeof(***p1) == sizeof(signed char))
+                r += sprintf(r, "signed char");
+            else if (sizeof(***p1) == sizeof(long))
+                r += sprintf(r, "long");
+            else if (sizeof(***p1) == sizeof(long long))
+                r += sprintf(r, "long long");
+            else
+                r += sprintf(r, "int%u_t", (int)sizeof(***p1) * 8);
+        }
+        r += sprintf(r, " *foo_t[%lld];\n", (long long)(sizeof(*p1) / sizeof(**p1)));
+        f2:;
     }
-    r("=foo_t:int?*[?]", a, 2);
-  f1:;
+    return r1;
 }
-
-#expect  =foo_t:int?*[?]  -4  27
diff --git a/test/codegen/005c.c b/test/codegen/005c.c
--- a/test/codegen/005c.c
+++ b/test/codegen/005c.c
@@ -2,27 +2,59 @@
 
 # ____________________________________________________________
 
-static void __creflect1(void r(char *, void**, int))
+int test005c(char *r)
 {
-    void *a[2];
-    __CREFLECT_PREV(r);
+    int r1 = 0;
+    if (!r)
+        return 58 + 8 + 18 + 38;
     {
         foo_t *p1;
         char *p2;
         char b[sizeof(***p1)];  /* check that '(*foo_t)[]' is a valid type */
+        char *r0 = r;
         p1 = (void *)&p2;
         *p1 = (void *)b;    /* check that 'foo_t' is a pointer type */
         if ((void *)*p1 != (void *)**p1) {
-            r("E:type '*foo_t' is not an array, but a pointer type", 0, 0);
-            goto f1;
+            r = r0;
+            r += sprintf(r, "#error type '*foo_t' is not an array, but a pointer type\n");
+            r1 = -1;
+            goto f2;
         }
         (void)(***p1 << 1);  /* check that '(*foo_t)[]' is an integer type */
+        r += sprintf(r, "typedef ");
         ***p1 = -1;
-        a[0] = (void *)(***p1 > 0 ? sizeof(***p1) : -sizeof(***p1));
-        a[1] = (void *)(sizeof(**p1) / sizeof(***p1));
+        if (***p1 > 0) {
+            if (sizeof(***p1) == 1 && ***p1 == 1)
+                r += sprintf(r, "_Bool");
+            else if (sizeof(***p1) == sizeof(unsigned int))
+                r += sprintf(r, "unsigned int");
+            else if (sizeof(***p1) == sizeof(unsigned short))
+                r += sprintf(r, "unsigned short");
+            else if (sizeof(***p1) == sizeof(unsigned char))
+                r += sprintf(r, "unsigned char");
+            else if (sizeof(***p1) == sizeof(unsigned long))
+                r += sprintf(r, "unsigned long");
+            else if (sizeof(***p1) == sizeof(unsigned long long))
+                r += sprintf(r, "unsigned long long");
+            else
+                r += sprintf(r, "uint%u_t", (int)sizeof(***p1) * 8);
+        }
+        else {
+            if (sizeof(***p1) == sizeof(int))
+                r += sprintf(r, "int");
+            else if (sizeof(***p1) == sizeof(short))
+                r += sprintf(r, "short");
+            else if (sizeof(***p1) == sizeof(signed char))
+                r += sprintf(r, "signed char");
+            else if (sizeof(***p1) == sizeof(long))
+                r += sprintf(r, "long");
+            else if (sizeof(***p1) == sizeof(long long))
+                r += sprintf(r, "long long");
+            else
+                r += sprintf(r, "int%u_t", (int)sizeof(***p1) * 8);
+        }
+        r += sprintf(r, " (*foo_t)[%lld];\n", (long long)(sizeof(**p1) / sizeof(***p1)));
+        f2:;
     }
-    r("=foo_t:int?(*)[?]", a, 2);
-  f1:;
+    return r1;
 }
-
-#expect  =foo_t:int?(*)[?]  -4  27
diff --git a/test/codegen/005d.c b/test/codegen/005d.c
--- a/test/codegen/005d.c
+++ b/test/codegen/005d.c
@@ -2,13 +2,15 @@
 
 # ____________________________________________________________
 
-static void __creflect1(void r(char *, void**, int))
+int test005d(char *r)
 {
-    void *a[5];
-    __CREFLECT_PREV(r);
+    int r1 = 0;
+    if (!r)
+        return 57 + 59 + 64 + 68 + 8 + 18 + 120;
     {
         foo_t *p1;
         char *p4;
+        char *r0 = r;
         char *p5;
         char *p6;
         char *p9;
@@ -16,36 +18,69 @@
         char b[sizeof(**********p1)];  /* check that '**(***foo_t[][])[][]' is a valid type */
         p1 = (void *)&p4;
         if ((void *)p1 != (void *)*p1) {
-            r("E:type 'foo_t' is not an array, but a pointer type", 0, 0);
-            goto f1;
+            r = r0;
+            r += sprintf(r, "#error type 'foo_t' is not an array, but a pointer type\n");
+            r1 = -1;
+            goto f2;
         }
         if ((void *)*p1 != (void *)**p1) {
-            r("E:type 'foo_t[]' is not an array, but a pointer type", 0, 0);
-            goto f1;
+            r = r0;
+            r += sprintf(r, "#error type 'foo_t[]' is not an array, but a pointer type\n");
+            r1 = -1;
+            goto f2;
         }
         ***p1 = (void *)&p5;  /* check that 'foo_t[][]' is a pointer type */
         ****p1 = (void *)&p6;  /* check that '*foo_t[][]' is a pointer type */
         *****p1 = (void *)&p9;  /* check that '**foo_t[][]' is a pointer type */
         if ((void *)*****p1 != (void *)******p1) {
-            r("E:type '***foo_t[][]' is not an array, but a pointer type", 0, 0);
-            goto f1;
+            r = r0;
+            r += sprintf(r, "#error type '***foo_t[][]' is not an array, but a pointer type\n");
+            r1 = -1;
+            goto f2;
         }
         if ((void *)******p1 != (void *)*******p1) {
-            r("E:type '(***foo_t[][])[]' is not an array, but a pointer type", 0, 0);
-            goto f1;
+            r = r0;
+            r += sprintf(r, "#error type '(***foo_t[][])[]' is not an array, but a pointer type\n");
+            r1 = -1;
+            goto f2;
         }
         ********p1 = (void *)&p10;  /* check that '(***foo_t[][])[][]' is a pointer type */
         *********p1 = (void *)b;    /* check that '*(***foo_t[][])[][]' is a pointer type */
         (void)(**********p1 << 1);  /* check that '**(***foo_t[][])[][]' is an integer type */
+        r += sprintf(r, "typedef ");
         **********p1 = -1;
-        a[0] = (void *)(**********p1 > 0 ? sizeof(**********p1) : -sizeof(**********p1));
-        a[1] = (void *)(sizeof(*p1) / sizeof(**p1));
-        a[2] = (void *)(sizeof(**p1) / sizeof(***p1));
-        a[3] = (void *)(sizeof(******p1) / sizeof(*******p1));
-        a[4] = (void *)(sizeof(*******p1) / sizeof(********p1));
+        if (**********p1 > 0) {
+            if (sizeof(**********p1) == 1 && **********p1 == 1)
+                r += sprintf(r, "_Bool");
+            else if (sizeof(**********p1) == sizeof(unsigned int))
+                r += sprintf(r, "unsigned int");
+            else if (sizeof(**********p1) == sizeof(unsigned short))
+                r += sprintf(r, "unsigned short");
+            else if (sizeof(**********p1) == sizeof(unsigned char))
+                r += sprintf(r, "unsigned char");
+            else if (sizeof(**********p1) == sizeof(unsigned long))
+                r += sprintf(r, "unsigned long");
+            else if (sizeof(**********p1) == sizeof(unsigned long long))
+                r += sprintf(r, "unsigned long long");
+            else
+                r += sprintf(r, "uint%u_t", (int)sizeof(**********p1) * 8);
+        }
+        else {
+            if (sizeof(**********p1) == sizeof(int))
+                r += sprintf(r, "int");
+            else if (sizeof(**********p1) == sizeof(short))
+                r += sprintf(r, "short");
+            else if (sizeof(**********p1) == sizeof(signed char))
+                r += sprintf(r, "signed char");
+            else if (sizeof(**********p1) == sizeof(long))
+                r += sprintf(r, "long");
+            else if (sizeof(**********p1) == sizeof(long long))
+                r += sprintf(r, "long long");
+            else
+                r += sprintf(r, "int%u_t", (int)sizeof(**********p1) * 8);
+        }
+        r += sprintf(r, " **(***foo_t[%lld][%lld])[%lld][%lld];\n", (long long)(sizeof(*p1) / sizeof(**p1)), (long long)(sizeof(**p1) / sizeof(***p1)), (long long)(sizeof(******p1) / sizeof(*******p1)), (long long)(sizeof(*******p1) / sizeof(********p1)));
+        f2:;
     }
-    r("=foo_t:int?**(***[?][?])[?][?]", a, 5);
-  f1:;
+    return r1;
 }
-
-#expect  =foo_t:int?**(***[?][?])[?][?]  -4  4  3  27  91
diff --git a/test/test_cgcompile.py b/test/test_cgcompile.py
--- a/test/test_cgcompile.py
+++ b/test/test_cgcompile.py
@@ -43,7 +43,6 @@
     for (i = 0; i <= r+3; i++)
         buffer[r] = 0xfd;
     r2 = TESTFN(buffer);
-    assert(r2 == 0);
     for (i = 0; i < r; i++) {
         assert(buffer[i] != (char)0xfd);
         if (buffer[i] == 0)
@@ -52,7 +51,7 @@
     assert(i < r);
     assert(i == 0 || buffer[i-1] == '\n');
     printf("%s", buffer);
-    return 0;
+    return (r2 != 0);
 }
 ''')
     f.close()


More information about the pypy-commit mailing list