Ticket #7093: lists.c.2.patch

File lists.c.2.patch, 1.5 KB (added by Steven Watanabe, 10 years ago)

Patch to fix the problem (take 2)

  • tools/build/v2/engine/lists.c

     
    1414#include <assert.h>
    1515
    1616
    17 struct freelist_node { struct freelist_node * next; };
     17union freelist_node { union freelist_node * next; LIST allow_aliasing; };
    1818
    19 static struct freelist_node * freelist[ 32 ];  /* junkpile for list_dealloc() */
     19static union freelist_node * freelist[ 32 ];  /* junkpile for list_dealloc() */
    2020
    2121static unsigned get_bucket( unsigned size )
    2222{
     
    3030    unsigned const bucket = get_bucket( size );
    3131    if ( freelist[ bucket ] )
    3232    {
    33         struct freelist_node * result = freelist[ bucket ];
     33        union freelist_node * result = freelist[ bucket ];
    3434        freelist[ bucket ] = result->next;
    3535        return (LIST *)result;
    3636    }
     
    4242{
    4343    unsigned size = list_length( l );
    4444    unsigned bucket;
    45     struct freelist_node * node = (struct freelist_node *)l;
     45    union freelist_node * node = (union freelist_node *)l;
    4646
    4747    if ( size == 0 ) return;
    4848
     
    372372    int i;
    373373    for ( i = 0; i < sizeof( freelist ) / sizeof( freelist[ 0 ] ); ++i )
    374374    {
    375         struct freelist_node * l = freelist[ i ];
     375        union freelist_node * l = freelist[ i ];
    376376        while ( l )
    377377        {
    378             struct freelist_node * const tmp = l;
     378            union freelist_node * const tmp = l;
    379379            l = l->next;
    380380            BJAM_FREE( tmp );
    381381        }