mirror of
https://gitlab.nic.cz/labs/bird.git
synced 2024-11-08 12:18:42 +00:00
CC Attribute Test: cleanup. A more thorough test.
This commit is contained in:
parent
d6241b24a2
commit
80dba8647a
@ -2,6 +2,6 @@ src := bitmap.c bitops.c blake2s.c blake2b.c checksum.c event.c flowspec.c idm.c
|
|||||||
obj := $(src-o-files)
|
obj := $(src-o-files)
|
||||||
$(all-daemon)
|
$(all-daemon)
|
||||||
|
|
||||||
tests_src := bitmap_test.c heap_test.c buffer_test.c event_test.c flowspec_test.c bitops_test.c patmatch_test.c fletcher16_test.c slist_test.c checksum_test.c lists_test.c mac_test.c ip_test.c hash_test.c printf_test.c slab_test.c
|
tests_src := attribute_cleanup_test.c bitmap_test.c heap_test.c buffer_test.c event_test.c flowspec_test.c bitops_test.c patmatch_test.c fletcher16_test.c slist_test.c checksum_test.c lists_test.c mac_test.c ip_test.c hash_test.c printf_test.c slab_test.c
|
||||||
tests_targets := $(tests_targets) $(tests-target-files)
|
tests_targets := $(tests_targets) $(tests-target-files)
|
||||||
tests_objs := $(tests_objs) $(src-o-files)
|
tests_objs := $(tests_objs) $(src-o-files)
|
||||||
|
83
lib/attribute_cleanup_test.c
Normal file
83
lib/attribute_cleanup_test.c
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
/*
|
||||||
|
* BIRD Library -- Auto storage attribute cleanup test
|
||||||
|
*
|
||||||
|
* (c) 2023 Maria Matejka <mq@jmq.cz>
|
||||||
|
* (c) 2023 CZ.NIC z.s.p.o.
|
||||||
|
*
|
||||||
|
* Can be freely distributed and used under the terms of the GNU GPL.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "test/birdtest.h"
|
||||||
|
|
||||||
|
static int order_pos;
|
||||||
|
//#define PUSH(n) bt_assert(order_pos++ == (n))
|
||||||
|
#define CHECK(n) ASSERT_DIE(order_pos++ == (n))
|
||||||
|
|
||||||
|
static void
|
||||||
|
tacd_cleanup(int *val)
|
||||||
|
{
|
||||||
|
CHECK(*val);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
tacd_aux(int pos)
|
||||||
|
{
|
||||||
|
CHECK(pos + 0);
|
||||||
|
|
||||||
|
__attribute__((cleanup(tacd_cleanup))) int upmost = pos + 18;
|
||||||
|
|
||||||
|
if (order_pos > 0)
|
||||||
|
{
|
||||||
|
CHECK(pos + 1);
|
||||||
|
__attribute__((cleanup(tacd_cleanup))) int inner_if = pos + 3;
|
||||||
|
CHECK(pos + 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i=0; i<3; i++)
|
||||||
|
{
|
||||||
|
CHECK(pos + 4 + 3*i);
|
||||||
|
__attribute__((cleanup(tacd_cleanup))) int inner_for = pos + 6 + 3*i;
|
||||||
|
CHECK(pos + 5 + 3*i);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (
|
||||||
|
__attribute__((cleanup(tacd_cleanup))) int i = pos + 15;
|
||||||
|
i < pos + 16; i++)
|
||||||
|
{
|
||||||
|
CHECK(pos + 13);
|
||||||
|
__attribute__((cleanup(tacd_cleanup))) int inner_for = pos + 15;
|
||||||
|
CHECK(pos + 14);
|
||||||
|
}
|
||||||
|
|
||||||
|
CHECK(pos + 17);
|
||||||
|
}
|
||||||
|
|
||||||
|
#define CHECKCNT 19
|
||||||
|
|
||||||
|
static int
|
||||||
|
t_attribute_cleanup_direct(void)
|
||||||
|
{
|
||||||
|
order_pos = 0;
|
||||||
|
CHECK(0);
|
||||||
|
|
||||||
|
for (int i=0; i<3; i++)
|
||||||
|
{
|
||||||
|
CHECK(i*(CHECKCNT+3) + 1);
|
||||||
|
__attribute__((cleanup(tacd_cleanup))) int inner_for = (i+1) * (CHECKCNT+3);
|
||||||
|
tacd_aux(i*(CHECKCNT+3) + 2);
|
||||||
|
CHECK((i+1) * (CHECKCNT+3) - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
CHECK(3 * (CHECKCNT+3) + 1);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
bt_init(argc, argv);
|
||||||
|
|
||||||
|
bt_test_suite(t_attribute_cleanup_direct, "Directly using __attribute__((cleanup))");
|
||||||
|
|
||||||
|
return bt_exit_value();
|
||||||
|
}
|
@ -274,12 +274,6 @@ rlookup(unsigned long a)
|
|||||||
debug("Not found.\n");
|
debug("Not found.\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
my_check(int *whatever UNUSED)
|
|
||||||
{
|
|
||||||
printf("Everything works well.\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* resource_init - initialize the resource manager
|
* resource_init - initialize the resource manager
|
||||||
*
|
*
|
||||||
@ -290,7 +284,6 @@ my_check(int *whatever UNUSED)
|
|||||||
void
|
void
|
||||||
resource_init(void)
|
resource_init(void)
|
||||||
{
|
{
|
||||||
__attribute__((cleanup(my_check))) int test = 42;
|
|
||||||
resource_sys_init();
|
resource_sys_init();
|
||||||
|
|
||||||
root_pool.r.class = &pool_class;
|
root_pool.r.class = &pool_class;
|
||||||
|
Loading…
Reference in New Issue
Block a user