File: bitarray/_bitarray.c
Function: richcompare
Error: returning (PyObject*)NULL without setting an exception
2047 static PyObject *
2048 richcompare(PyObject *v, PyObject *w, int op)
2049 {
2050     int cmp, k, vi, wi;
2051     idx_t i;
2052 
2053     if (!bitarray_Check(v) || !bitarray_Check(w)) {
taking True path
when considering range: -0x80000000 <= value <= -1
taking False path
taking True path
when considering range: -0x80000000 <= value <= -1
taking False path
2054         Py_INCREF(Py_NotImplemented);
2055         return Py_NotImplemented;
2056     }
2057 #define va  ((bitarrayobject *) v)
2058 #define wa  ((bitarrayobject *) w)
2059     if (va->nbits != wa->nbits && (op == Py_EQ || op == Py_NE)) {
when taking True path
when considering range: 2 <= value <= 0x7ffffffd
taking False path
2060         /* Shortcut: if the lengths differ, the bitarrays differ */
2061         if (op == Py_EQ)
2062             Py_RETURN_FALSE;
2063 
2064         Py_RETURN_TRUE;
2065     }
2066     /* to avoid uninitialized warning for some compilers */
2067     vi = wi = 0;
2068     /* Search for the first index where items are different */
2069     k = 1;
2070     for (i = 0; i < va->nbits && i < wa->nbits; i++) {
when considering range: 1 <= value <= 0x7fffffffffffffff
taking True path
when considering range: 1 <= value <= 0x7fffffffffffffff
taking True path
when considering range: -0x8000000000000000 <= value <= 1
taking False path
2071         vi = GETBIT(va, i);
when treating unknown char * from bitarray/_bitarray.c:2071 as non-NULL
when considering range: -0x80000000 <= value <= -1
taking True path
when considering value == (int)0 from bitarray/_bitarray.c:2071
2072         wi = GETBIT(wa, i);
when treating unknown char * from bitarray/_bitarray.c:2072 as non-NULL
when considering range: -0x80000000 <= value <= -1
taking True path
when considering value == (int)0 from bitarray/_bitarray.c:2072
2073         k = (vi == wi);
2074         if (k == 0)
taking False path
2075             break;
2076     }
2077     if (k) {
taking True path
2078         /* No more items to compare -- compare sizes */
2079         idx_t vs = va->nbits;
2080         idx_t ws = wa->nbits;
2081 #undef va
2082 #undef wa
2083         switch (op) {
when following default
2084         case Py_LT: cmp = vs <  ws; break;
2085         case Py_LE: cmp = vs <= ws; break;
2086         case Py_EQ: cmp = vs == ws; break;
2087         case Py_NE: cmp = vs != ws; break;
2088         case Py_GT: cmp = vs >  ws; break;
2089         case Py_GE: cmp = vs >= ws; break;
2090         default: return NULL; /* cannot happen */
2091         }
2092         if (cmp)
2093             Py_RETURN_TRUE;
2094 
2095         Py_RETURN_FALSE;
2096     }
2097     /* We have an item that differs.  First, shortcuts for EQ/NE */
2098     if (op == Py_EQ)
2099         Py_RETURN_FALSE;
2100 
2101     if (op == Py_NE)
2102         Py_RETURN_TRUE;
2103 
2104     /* Compare the final item using the proper operator */
2105     switch (op) {
2106     case Py_LT: cmp = vi <  wi; break;
2107     case Py_LE: cmp = vi <= wi; break;
2108     case Py_EQ: cmp = vi == wi; break;
2109     case Py_NE: cmp = vi != wi; break;
2110     case Py_GT: cmp = vi >  wi; break;
2111     case Py_GE: cmp = vi >= wi; break;
2112     default: return NULL; /* cannot happen */
2113     }
2114     if (cmp)
2115         Py_RETURN_TRUE;
2116 
2117     Py_RETURN_FALSE;
2118 }
returning (PyObject*)NULL without setting an exception
found 2 similar trace(s) to this