[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