Add and use FREE() to complement ALLOC().

Now it will be easy to test memory access with valgrind (just compile with
DEBUG_QFCC_MEMORY defined).
This commit is contained in:
Bill Currie 2012-12-04 13:23:31 +09:00
parent 0872961269
commit 98a0afa38f
9 changed files with 44 additions and 35 deletions

View file

@ -123,6 +123,7 @@ char *fix_backslash (char *path);
#define NORMALIZE(x) x
#endif
#ifndef DEBUG_QFCC_MEMORY
/** High-tide structure allocator for use in linked lists.
Using a free-list with the name of \c free_NAME, return a single element.
@ -153,6 +154,28 @@ char *fix_backslash (char *path);
memset (v, 0, sizeof (*v)); \
} while (0)
/** Free a block allocated by #ALLOC
\param n The \c NAME portion of the \c free_NAME free-list.
\param p The pointer to the block to be freed.
\hideinitializer
*/
#define FREE(n, p) \
do { \
p->next = free_##n; \
free_##n = p->next; \
} while (0)
#else
#define ALLOC(s, t, n, v) \
do { \
__attribute__((unused)) t **dummy = &free_##n; \
v = (t *) calloc (1, sizeof (t)); \
} while (0)
#define FREE(n, p) do { free (p); } while (0)
#endif
/** Round \a x up to the next multiple of \a a.
\note \a a must be a power of two or this will break.
\note There are no side effects on \a x.

View file

@ -75,8 +75,7 @@ pop_source_file (void)
}
tmp = pr.srcline_stack;
pr.srcline_stack = tmp->next;
tmp->next = free_srclines;
free_srclines = tmp;
FREE (srclines, tmp);
}
void

View file

@ -241,8 +241,7 @@ free_def (def_t *def)
}
def->return_addr = 0;
def->free_addr = __builtin_return_address (0);
def->next = free_defs;
free_defs = def;
FREE (defs, def);
}
void

View file

@ -106,8 +106,7 @@ defspace_alloc_loc (defspace_t *space, int size)
if ((*l)->size == size) {
loc = *l;
*l = (*l)->next;
loc->next = free_locrefs;
free_locrefs = loc;
FREE (locrefs, loc);
} else {
(*l)->ofs += size;
(*l)->size -= size;
@ -163,8 +162,7 @@ defspace_free_loc (defspace_t *space, int ofs, int size)
loc->size += loc->next->size;
loc = loc->next;
*l = loc->next;
loc->next = free_locrefs;
free_locrefs = loc;
FREE (locrefs, loc);
}
return;
}

View file

@ -99,8 +99,7 @@ static void
delete_loop (flowloop_t *loop)
{
set_delete (loop->nodes);
loop->next = free_loops;
free_loops = loop;
FREE (loops, loop);
}
static flownode_t *
@ -122,8 +121,7 @@ delete_node (flownode_t *node)
set_delete (node->edges);
if (node->dom)
set_delete (node->dom);
node->next = free_nodes;
free_nodes = node;
FREE (nodes, node);
}
static flowgraph_t *
@ -150,8 +148,7 @@ delete_graph (flowgraph_t *graph)
set_delete (graph->dfst);
if (graph->dfo)
free (graph->dfo);
graph->next = free_graphs;
free_graphs = graph;
FREE (graphs, graph);
}
static def_t *

View file

@ -82,8 +82,7 @@ static void
frame_free (void *_f, void *unused)
{
frame_t *f = (frame_t *)_f;
f->next = free_frames;
free_frames = f;
FREE (frames, f);
}
int

View file

@ -62,8 +62,7 @@ new_setiter (void)
static void
delete_setiter (set_iter_t *set_iter)
{
set_iter->next = free_set_iters;
free_set_iters = set_iter;
FREE (set_iters, set_iter);
}
void
@ -88,8 +87,7 @@ set_delete (set_t *set)
{
if (set->map != set->defmap)
free (set->map);
set->next = free_sets;
free_sets = set;
FREE (sets, set);
}
static void

View file

@ -256,7 +256,7 @@ new_operand (op_type_e op)
return operand;
}
static void
static void __attribute__((unused)) //FIXME
free_operand (operand_t *op)
{
if (op->next) {
@ -267,21 +267,19 @@ free_operand (operand_t *op)
}
if (op->op_type == op_alias)
free_operand (op->o.alias);
op->next = free_operands;
free_operands = op;
FREE (operands, op);
}
static void
free_statement (statement_t *s)
{
if (s->opa)
free_operand (s->opa);
if (s->opb)
free_operand (s->opb);
if (s->opc)
free_operand (s->opc);
s->next = free_statements;
free_statements = s;
// if (s->opa)
// free_operand (s->opa);
// if (s->opb)
// free_operand (s->opb);
// if (s->opc)
// free_operand (s->opc);
FREE (statements, s);
}
static void
@ -292,8 +290,7 @@ free_sblock (sblock_t *sblock)
sblock->statements = s->next;
free_statement (s);
}
sblock->next = free_sblocks;
free_sblocks = sblock;
FREE (sblocks, sblock);
}
operand_t *

View file

@ -182,8 +182,7 @@ free_type (type_t *type)
break;
}
memset (type, 0, sizeof (type));
type->next = free_types;
free_types = type;
FREE (types, type);
}
type_t *