mirror of https://github.com/YosysHQ/abc.git
Suggested fix of an overflow in vectors (compiler error).
This commit is contained in:
parent
4f1b961d00
commit
c4a10c728e
|
|
@ -80,13 +80,6 @@
|
|||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#ifdef WIN32
|
||||
#include <windows.h>
|
||||
#define PATH_MAX MAX_PATH
|
||||
#else
|
||||
#include <limits.h>
|
||||
#endif
|
||||
|
||||
// catch memory leaks in Visual Studio
|
||||
#ifdef WIN32
|
||||
#ifdef _DEBUG
|
||||
|
|
@ -255,6 +248,7 @@ typedef ABC_INT64_T iword;
|
|||
////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define ABC_INFINITY (1000000000)
|
||||
#define ABC_INT_MAX (2147483647)
|
||||
|
||||
#define ABC_SWAP(Type, a, b) { Type t = a; a = b; b = t; }
|
||||
|
||||
|
|
|
|||
|
|
@ -350,7 +350,7 @@ static inline void Vec_BitGrow( Vec_Bit_t * p, int nCapMin )
|
|||
{
|
||||
if ( p->nCap >= nCapMin )
|
||||
return;
|
||||
assert( p->nCap < INT_MAX );
|
||||
assert( p->nCap < ABC_INT_MAX );
|
||||
nCapMin = (nCapMin >> 5) + ((nCapMin & 31) > 0);
|
||||
p->pArray = ABC_REALLOC( int, p->pArray, nCapMin );
|
||||
assert( p->pArray );
|
||||
|
|
@ -406,7 +406,7 @@ static inline void Vec_BitFillExtra( Vec_Bit_t * p, int nSize, int Fill )
|
|||
if ( nSize > 2 * p->nCap )
|
||||
Vec_BitGrow( p, nSize );
|
||||
else if ( nSize > p->nCap )
|
||||
Vec_BitGrow( p, p->nCap < INT_MAX/2 ? 2 * p->nCap : INT_MAX );
|
||||
Vec_BitGrow( p, p->nCap < ABC_INT_MAX/2 ? 2 * p->nCap : ABC_INT_MAX );
|
||||
|
||||
assert( p->nSize < nSize );
|
||||
if ( (p->nSize >> 5) == (nSize >> 5) )
|
||||
|
|
@ -528,7 +528,7 @@ static inline void Vec_BitPush( Vec_Bit_t * p, int Entry )
|
|||
if ( p->nCap < 16 )
|
||||
Vec_BitGrow( p, 16 );
|
||||
else
|
||||
Vec_BitGrow( p, p->nCap < INT_MAX/2 ? 2 * p->nCap : INT_MAX );
|
||||
Vec_BitGrow( p, p->nCap < ABC_INT_MAX/2 ? 2 * p->nCap : ABC_INT_MAX );
|
||||
}
|
||||
if ( Entry == 1 )
|
||||
p->pArray[p->nSize >> 5] |= (1 << (p->nSize & 31));
|
||||
|
|
|
|||
|
|
@ -454,7 +454,7 @@ static inline void Vec_FltGrow( Vec_Flt_t * p, int nCapMin )
|
|||
{
|
||||
if ( p->nCap >= nCapMin )
|
||||
return;
|
||||
assert( p->nCap < INT_MAX );
|
||||
assert( p->nCap < ABC_INT_MAX );
|
||||
p->pArray = ABC_REALLOC( float, p->pArray, nCapMin );
|
||||
p->nCap = nCapMin;
|
||||
}
|
||||
|
|
@ -498,7 +498,7 @@ static inline void Vec_FltFillExtra( Vec_Flt_t * p, int nSize, float Fill )
|
|||
if ( nSize > 2 * p->nCap )
|
||||
Vec_FltGrow( p, nSize );
|
||||
else if ( nSize > p->nCap )
|
||||
Vec_FltGrow( p, p->nCap < INT_MAX/2 ? 2 * p->nCap : INT_MAX );
|
||||
Vec_FltGrow( p, p->nCap < ABC_INT_MAX/2 ? 2 * p->nCap : ABC_INT_MAX );
|
||||
for ( i = p->nSize; i < nSize; i++ )
|
||||
p->pArray[i] = Fill;
|
||||
p->nSize = nSize;
|
||||
|
|
@ -555,7 +555,7 @@ static inline void Vec_FltPush( Vec_Flt_t * p, float Entry )
|
|||
if ( p->nCap < 16 )
|
||||
Vec_FltGrow( p, 16 );
|
||||
else
|
||||
Vec_FltGrow( p, p->nCap < INT_MAX/2 ? 2 * p->nCap : INT_MAX );
|
||||
Vec_FltGrow( p, p->nCap < ABC_INT_MAX/2 ? 2 * p->nCap : ABC_INT_MAX );
|
||||
}
|
||||
p->pArray[p->nSize++] = Entry;
|
||||
}
|
||||
|
|
@ -579,7 +579,7 @@ static inline void Vec_FltPushOrder( Vec_Flt_t * p, float Entry )
|
|||
if ( p->nCap < 16 )
|
||||
Vec_FltGrow( p, 16 );
|
||||
else
|
||||
Vec_FltGrow( p, p->nCap < INT_MAX/2 ? 2 * p->nCap : INT_MAX );
|
||||
Vec_FltGrow( p, p->nCap < ABC_INT_MAX/2 ? 2 * p->nCap : ABC_INT_MAX );
|
||||
}
|
||||
p->nSize++;
|
||||
for ( i = p->nSize-2; i >= 0; i-- )
|
||||
|
|
|
|||
|
|
@ -552,7 +552,7 @@ static inline void Vec_IntGrow( Vec_Int_t * p, int nCapMin )
|
|||
{
|
||||
if ( p->nCap >= nCapMin )
|
||||
return;
|
||||
assert( p->nCap < INT_MAX );
|
||||
assert( p->nCap < ABC_INT_MAX );
|
||||
p->pArray = ABC_REALLOC( int, p->pArray, nCapMin );
|
||||
assert( p->pArray );
|
||||
p->nCap = nCapMin;
|
||||
|
|
@ -634,7 +634,7 @@ static inline void Vec_IntFillExtra( Vec_Int_t * p, int nSize, int Fill )
|
|||
if ( nSize > 2 * p->nCap )
|
||||
Vec_IntGrow( p, nSize );
|
||||
else if ( nSize > p->nCap )
|
||||
Vec_IntGrow( p, p->nCap < INT_MAX/2 ? 2 * p->nCap : INT_MAX );
|
||||
Vec_IntGrow( p, p->nCap < ABC_INT_MAX/2 ? 2 * p->nCap : ABC_INT_MAX );
|
||||
for ( i = p->nSize; i < nSize; i++ )
|
||||
p->pArray[i] = Fill;
|
||||
p->nSize = nSize;
|
||||
|
|
@ -752,7 +752,7 @@ static inline void Vec_IntPush( Vec_Int_t * p, int Entry )
|
|||
if ( p->nCap < 16 )
|
||||
Vec_IntGrow( p, 16 );
|
||||
else
|
||||
Vec_IntGrow( p, p->nCap < INT_MAX/2 ? 2 * p->nCap : INT_MAX );
|
||||
Vec_IntGrow( p, p->nCap < ABC_INT_MAX/2 ? 2 * p->nCap : ABC_INT_MAX );
|
||||
}
|
||||
p->pArray[p->nSize++] = Entry;
|
||||
}
|
||||
|
|
@ -811,7 +811,7 @@ static inline void Vec_IntPushFirst( Vec_Int_t * p, int Entry )
|
|||
if ( p->nCap < 16 )
|
||||
Vec_IntGrow( p, 16 );
|
||||
else
|
||||
Vec_IntGrow( p, p->nCap < INT_MAX/2 ? 2 * p->nCap : INT_MAX );
|
||||
Vec_IntGrow( p, p->nCap < ABC_INT_MAX/2 ? 2 * p->nCap : ABC_INT_MAX );
|
||||
}
|
||||
p->nSize++;
|
||||
for ( i = p->nSize - 1; i >= 1; i-- )
|
||||
|
|
@ -838,7 +838,7 @@ static inline void Vec_IntPushOrder( Vec_Int_t * p, int Entry )
|
|||
if ( p->nCap < 16 )
|
||||
Vec_IntGrow( p, 16 );
|
||||
else
|
||||
Vec_IntGrow( p, p->nCap < INT_MAX/2 ? 2 * p->nCap : INT_MAX );
|
||||
Vec_IntGrow( p, p->nCap < ABC_INT_MAX/2 ? 2 * p->nCap : ABC_INT_MAX );
|
||||
}
|
||||
p->nSize++;
|
||||
for ( i = p->nSize-2; i >= 0; i-- )
|
||||
|
|
@ -856,7 +856,7 @@ static inline void Vec_IntPushOrderCost( Vec_Int_t * p, int Entry, Vec_Int_t * v
|
|||
if ( p->nCap < 16 )
|
||||
Vec_IntGrow( p, 16 );
|
||||
else
|
||||
Vec_IntGrow( p, p->nCap < INT_MAX/2 ? 2 * p->nCap : INT_MAX );
|
||||
Vec_IntGrow( p, p->nCap < ABC_INT_MAX/2 ? 2 * p->nCap : ABC_INT_MAX );
|
||||
}
|
||||
p->nSize++;
|
||||
for ( i = p->nSize-2; i >= 0; i-- )
|
||||
|
|
@ -932,7 +932,7 @@ static inline void Vec_IntPushOrderReverse( Vec_Int_t * p, int Entry )
|
|||
if ( p->nCap < 16 )
|
||||
Vec_IntGrow( p, 16 );
|
||||
else
|
||||
Vec_IntGrow( p, p->nCap < INT_MAX/2 ? 2 * p->nCap : INT_MAX );
|
||||
Vec_IntGrow( p, p->nCap < ABC_INT_MAX/2 ? 2 * p->nCap : ABC_INT_MAX );
|
||||
}
|
||||
p->nSize++;
|
||||
for ( i = p->nSize-2; i >= 0; i-- )
|
||||
|
|
|
|||
|
|
@ -455,7 +455,7 @@ static inline void Vec_PtrGrow( Vec_Ptr_t * p, int nCapMin )
|
|||
{
|
||||
if ( p->nCap >= nCapMin )
|
||||
return;
|
||||
assert( p->nCap < INT_MAX );
|
||||
assert( p->nCap < ABC_INT_MAX );
|
||||
p->pArray = ABC_REALLOC( void *, p->pArray, nCapMin );
|
||||
p->nCap = nCapMin;
|
||||
}
|
||||
|
|
@ -507,7 +507,7 @@ static inline void Vec_PtrFillExtra( Vec_Ptr_t * p, int nSize, void * Fill )
|
|||
if ( nSize > 2 * p->nCap )
|
||||
Vec_PtrGrow( p, nSize );
|
||||
else if ( nSize > p->nCap )
|
||||
Vec_PtrGrow( p, p->nCap < INT_MAX/2 ? 2 * p->nCap : INT_MAX );
|
||||
Vec_PtrGrow( p, p->nCap < ABC_INT_MAX/2 ? 2 * p->nCap : ABC_INT_MAX );
|
||||
for ( i = p->nSize; i < nSize; i++ )
|
||||
p->pArray[i] = Fill;
|
||||
p->nSize = nSize;
|
||||
|
|
@ -683,7 +683,7 @@ static inline void Vec_PtrPush( Vec_Ptr_t * p, void * Entry )
|
|||
if ( p->nCap < 16 )
|
||||
Vec_PtrGrow( p, 16 );
|
||||
else
|
||||
Vec_PtrGrow( p, p->nCap < INT_MAX/2 ? 2 * p->nCap : INT_MAX );
|
||||
Vec_PtrGrow( p, p->nCap < ABC_INT_MAX/2 ? 2 * p->nCap : ABC_INT_MAX );
|
||||
}
|
||||
p->pArray[p->nSize++] = Entry;
|
||||
}
|
||||
|
|
@ -718,7 +718,7 @@ static inline void Vec_PtrPushFirst( Vec_Ptr_t * p, void * Entry )
|
|||
if ( p->nCap < 16 )
|
||||
Vec_PtrGrow( p, 16 );
|
||||
else
|
||||
Vec_PtrGrow( p, p->nCap < INT_MAX/2 ? 2 * p->nCap : INT_MAX );
|
||||
Vec_PtrGrow( p, p->nCap < ABC_INT_MAX/2 ? 2 * p->nCap : ABC_INT_MAX );
|
||||
}
|
||||
p->nSize++;
|
||||
for ( i = p->nSize - 1; i >= 1; i-- )
|
||||
|
|
|
|||
|
|
@ -101,7 +101,7 @@ static inline void Vec_QueGrow( Vec_Que_t * p, int nCapMin )
|
|||
{
|
||||
if ( p->nCap >= nCapMin )
|
||||
return;
|
||||
assert( p->nCap < INT_MAX );
|
||||
assert( p->nCap < ABC_INT_MAX );
|
||||
p->pHeap = ABC_REALLOC( int, p->pHeap, nCapMin );
|
||||
p->pOrder = ABC_REALLOC( int, p->pOrder, nCapMin );
|
||||
memset( p->pHeap + p->nCap, 0xff, (size_t)(nCapMin - p->nCap) * sizeof(int) );
|
||||
|
|
@ -226,9 +226,9 @@ static inline int Vec_QueIsMember( Vec_Que_t * p, int v )
|
|||
static inline void Vec_QuePush( Vec_Que_t * p, int v )
|
||||
{
|
||||
if ( p->nSize >= p->nCap )
|
||||
Vec_QueGrow( p, Abc_MaxInt(p->nSize+1, p->nCap < INT_MAX/2 ? 2 * p->nCap : INT_MAX) );
|
||||
Vec_QueGrow( p, Abc_MaxInt(p->nSize+1, p->nCap < ABC_INT_MAX/2 ? 2 * p->nCap : ABC_INT_MAX) );
|
||||
if ( v >= p->nCap )
|
||||
Vec_QueGrow( p, Abc_MaxInt(v+1, p->nCap < INT_MAX/2 ? 2 * p->nCap : INT_MAX) );
|
||||
Vec_QueGrow( p, Abc_MaxInt(v+1, p->nCap < ABC_INT_MAX/2 ? 2 * p->nCap : ABC_INT_MAX) );
|
||||
assert( p->nSize < p->nCap );
|
||||
assert( p->pOrder[v] == -1 );
|
||||
assert( p->pHeap[p->nSize] == -1 );
|
||||
|
|
|
|||
|
|
@ -423,7 +423,7 @@ static inline void Vec_StrGrow( Vec_Str_t * p, int nCapMin )
|
|||
{
|
||||
if ( p->nCap >= nCapMin )
|
||||
return;
|
||||
assert( p->nCap < INT_MAX );
|
||||
assert( p->nCap < ABC_INT_MAX );
|
||||
p->pArray = ABC_REALLOC( char, p->pArray, nCapMin );
|
||||
p->nCap = nCapMin;
|
||||
}
|
||||
|
|
@ -467,7 +467,7 @@ static inline void Vec_StrFillExtra( Vec_Str_t * p, int nSize, char Fill )
|
|||
if ( nSize > 2 * p->nCap )
|
||||
Vec_StrGrow( p, nSize );
|
||||
else if ( nSize > p->nCap )
|
||||
Vec_StrGrow( p, p->nCap < INT_MAX/2 ? 2 * p->nCap : INT_MAX );
|
||||
Vec_StrGrow( p, p->nCap < ABC_INT_MAX/2 ? 2 * p->nCap : ABC_INT_MAX );
|
||||
for ( i = p->nSize; i < nSize; i++ )
|
||||
p->pArray[i] = Fill;
|
||||
p->nSize = nSize;
|
||||
|
|
@ -558,7 +558,7 @@ static inline void Vec_StrPush( Vec_Str_t * p, char Entry )
|
|||
if ( p->nCap < 16 )
|
||||
Vec_StrGrow( p, 16 );
|
||||
else
|
||||
Vec_StrGrow( p, p->nCap < INT_MAX/2 ? 2 * p->nCap : INT_MAX );
|
||||
Vec_StrGrow( p, p->nCap < ABC_INT_MAX/2 ? 2 * p->nCap : ABC_INT_MAX );
|
||||
}
|
||||
p->pArray[p->nSize++] = Entry;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -553,6 +553,7 @@ static inline void Vec_WrdGrow( Vec_Wrd_t * p, int nCapMin )
|
|||
{
|
||||
if ( p->nCap >= nCapMin )
|
||||
return;
|
||||
assert( p->nCap < ABC_INT_MAX );
|
||||
p->pArray = ABC_REALLOC( word, p->pArray, nCapMin );
|
||||
assert( p->pArray );
|
||||
p->nCap = nCapMin;
|
||||
|
|
@ -597,7 +598,7 @@ static inline void Vec_WrdFillExtra( Vec_Wrd_t * p, int nSize, word Fill )
|
|||
if ( nSize > 2 * p->nCap )
|
||||
Vec_WrdGrow( p, nSize );
|
||||
else if ( nSize > p->nCap )
|
||||
Vec_WrdGrow( p, 2 * p->nCap );
|
||||
Vec_WrdGrow( p, p->nCap < ABC_INT_MAX/2 ? 2 * p->nCap : ABC_INT_MAX );
|
||||
for ( i = p->nSize; i < nSize; i++ )
|
||||
p->pArray[i] = Fill;
|
||||
p->nSize = nSize;
|
||||
|
|
@ -705,7 +706,7 @@ static inline void Vec_WrdPush( Vec_Wrd_t * p, word Entry )
|
|||
if ( p->nCap < 16 )
|
||||
Vec_WrdGrow( p, 16 );
|
||||
else
|
||||
Vec_WrdGrow( p, 2 * p->nCap );
|
||||
Vec_WrdGrow( p, p->nCap < ABC_INT_MAX/2 ? 2 * p->nCap : ABC_INT_MAX );
|
||||
}
|
||||
p->pArray[p->nSize++] = Entry;
|
||||
}
|
||||
|
|
@ -753,7 +754,7 @@ static inline void Vec_WrdPushFirst( Vec_Wrd_t * p, word Entry )
|
|||
if ( p->nCap < 16 )
|
||||
Vec_WrdGrow( p, 16 );
|
||||
else
|
||||
Vec_WrdGrow( p, 2 * p->nCap );
|
||||
Vec_WrdGrow( p, p->nCap < ABC_INT_MAX/2 ? 2 * p->nCap : ABC_INT_MAX );
|
||||
}
|
||||
p->nSize++;
|
||||
for ( i = p->nSize - 1; i >= 1; i-- )
|
||||
|
|
@ -780,7 +781,7 @@ static inline void Vec_WrdPushOrder( Vec_Wrd_t * p, word Entry )
|
|||
if ( p->nCap < 16 )
|
||||
Vec_WrdGrow( p, 16 );
|
||||
else
|
||||
Vec_WrdGrow( p, 2 * p->nCap );
|
||||
Vec_WrdGrow( p, p->nCap < ABC_INT_MAX/2 ? 2 * p->nCap : ABC_INT_MAX );
|
||||
}
|
||||
p->nSize++;
|
||||
for ( i = p->nSize-2; i >= 0; i-- )
|
||||
|
|
|
|||
Loading…
Reference in New Issue