Add attribute cleanup test
This commit is contained in:
parent
0d91ba749c
commit
ff38d90d5d
2 changed files with 144 additions and 0 deletions
124
tests/tests2/101_cleanup.c
Normal file
124
tests/tests2/101_cleanup.c
Normal file
|
|
@ -0,0 +1,124 @@
|
||||||
|
#include <tcclib.h>
|
||||||
|
|
||||||
|
void check2(char **hum);
|
||||||
|
|
||||||
|
void check(int *j)
|
||||||
|
{
|
||||||
|
char * __attribute__ ((cleanup(check2))) stop_that = "wololo";
|
||||||
|
int chk = 0;
|
||||||
|
|
||||||
|
{
|
||||||
|
char * __attribute__ ((cleanup(check2))) stop_that = "plop";
|
||||||
|
|
||||||
|
{
|
||||||
|
non_plopage:
|
||||||
|
printf("---- %d\n", chk);
|
||||||
|
}
|
||||||
|
if (!chk) {
|
||||||
|
chk = 1;
|
||||||
|
goto non_plopage;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
char * __attribute__ ((cleanup(check2))) stop_that = "tata !";
|
||||||
|
|
||||||
|
goto out;
|
||||||
|
stop_that = "titi";
|
||||||
|
}
|
||||||
|
again:
|
||||||
|
chk = 2;
|
||||||
|
{
|
||||||
|
char * __attribute__ ((cleanup(check2))) cascade1 = "1";
|
||||||
|
{
|
||||||
|
char * __attribute__ ((cleanup(check2))) cascade2 = "2";
|
||||||
|
{
|
||||||
|
char * __attribute__ ((cleanup(check2))) cascade3 = "3";
|
||||||
|
|
||||||
|
goto out;
|
||||||
|
cascade3 = "nope";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
out:
|
||||||
|
if (chk != 2)
|
||||||
|
goto again;
|
||||||
|
{
|
||||||
|
{
|
||||||
|
char * __attribute__ ((cleanup(check2))) out = "last goto out";
|
||||||
|
++chk;
|
||||||
|
if (chk != 3)
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
void check_oh_i(char *oh_i)
|
||||||
|
{
|
||||||
|
printf("c: %c\n", *oh_i);
|
||||||
|
}
|
||||||
|
|
||||||
|
void goto_hell(double *f)
|
||||||
|
{
|
||||||
|
printf("oo: %f\n", *f);
|
||||||
|
}
|
||||||
|
|
||||||
|
char *test()
|
||||||
|
{
|
||||||
|
char *__attribute__ ((cleanup(check2))) str = "I don't think this should be print(but gcc got it wrong too)";
|
||||||
|
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
|
void test_ret_subcall(char *that)
|
||||||
|
{
|
||||||
|
printf("should be print before\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
void test_ret()
|
||||||
|
{
|
||||||
|
char *__attribute__ ((cleanup(check2))) that = "that";
|
||||||
|
return test_ret_subcall(that);
|
||||||
|
}
|
||||||
|
|
||||||
|
void test_ret2()
|
||||||
|
{
|
||||||
|
char *__attribute__ ((cleanup(check2))) that = "-that";
|
||||||
|
{
|
||||||
|
char *__attribute__ ((cleanup(check2))) that = "this should appear only once";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
char *__attribute__ ((cleanup(check2))) that = "-that2";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int i __attribute__ ((__cleanup__(check))) = 0, not_i;
|
||||||
|
int chk = 0;
|
||||||
|
|
||||||
|
{
|
||||||
|
__attribute__ ((__cleanup__(check_oh_i))) char oh_i = 'o', o = 'a';
|
||||||
|
}
|
||||||
|
|
||||||
|
naaaaaaaa:
|
||||||
|
if (!chk) {
|
||||||
|
__attribute__ ((__cleanup__(check_oh_i))) char oh_i = 'f';
|
||||||
|
double __attribute__ ((__cleanup__(goto_hell))) f = 2.6;
|
||||||
|
|
||||||
|
chk = 1;
|
||||||
|
goto naaaaaaaa;
|
||||||
|
}
|
||||||
|
i = 105;
|
||||||
|
printf("because what if free was call inside cleanup function\n", test());
|
||||||
|
test_ret();
|
||||||
|
test_ret2();
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
void check2(char **hum)
|
||||||
|
{
|
||||||
|
printf("str: %s\n", *hum);
|
||||||
|
}
|
||||||
20
tests/tests2/101_cleanup.expect
Normal file
20
tests/tests2/101_cleanup.expect
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
c: a
|
||||||
|
c: o
|
||||||
|
oo: 2.600000
|
||||||
|
c: f
|
||||||
|
str: I don't think this should be print(but gcc got it wrong too)
|
||||||
|
because what if free was call inside cleanup function
|
||||||
|
should be print before
|
||||||
|
str: that
|
||||||
|
str: this should appear only once
|
||||||
|
str: -that2
|
||||||
|
str: -that
|
||||||
|
---- 0
|
||||||
|
---- 1
|
||||||
|
str: plop
|
||||||
|
str: tata !
|
||||||
|
str: 3
|
||||||
|
str: 2
|
||||||
|
str: 1
|
||||||
|
str: last goto out
|
||||||
|
str: wololo
|
||||||
Loading…
Add table
Reference in a new issue