Files
TinyCC/tests/tests2/79_vla_continue.c
Philip d2dd6fdbfb fix VLA/continue issue
as reported in
http://lists.nongnu.org/archive/html/tinycc-devel/2015-04/msg00131.html. Note
that this is one of two separate VLA bugs:

 A. labels aren't reached by program execution, so the stack pointer is
 never saved
 B. continue doesn't restore the stack pointer as goto does

This fixes only B. I'm not sure whether the same issue applies to break
as well as continue.

Add a test case, but disable tests #78 and #79 for now as they're not
fully fixed until the issue described in
http://lists.nongnu.org/archive/html/tinycc-devel/2015-04/msg00110.html
is resolved.
2015-04-27 16:42:27 +00:00

93 lines
1006 B
C

#include <stdio.h>
int f(void)
{
return 5;
}
void test1()
{
int count = 10;
void *addr[10];
for(;count--;) {
int a[f()];
addr[count] = a;
continue;
}
if(addr[9] == addr[0]) {
printf("OK\n");
} else {
printf("NOT OK\n");
}
}
void test2()
{
int count = 10;
void *addr[count];
for(;count--;) {
int a[f()];
addr[count] = a;
continue;
}
if(addr[9] == addr[0]) {
printf("OK\n");
} else {
printf("NOT OK\n");
}
}
void test3()
{
int count = 10;
void *addr[count];
while(count--) {
int a[f()];
addr[count] = a;
continue;
}
if(addr[9] == addr[0]) {
printf("OK\n");
} else {
printf("NOT OK\n");
}
}
void test4()
{
int count = 10;
void *addr[count];
do {
int a[f()];
addr[count] = a;
continue;
} while(count--);
if(addr[9] == addr[0]) {
printf("OK\n");
} else {
printf("NOT OK\n");
}
}
int main(void)
{
test1();
test2();
test3();
test4();
return 0;
}