]> granicus.if.org Git - re2c/commitdiff
Another explicit cast of pointer difference to uint32_t that seems to be safe.
authorUlya Trofimovich <skvadrik@gmail.com>
Mon, 10 Aug 2015 09:51:11 +0000 (10:51 +0100)
committerUlya Trofimovich <skvadrik@gmail.com>
Mon, 10 Aug 2015 10:25:05 +0000 (11:25 +0100)
In theory, 'top' points at the top of stack and it's value is always greater
than or equal to 'stk' that points to stack bottom. Total stack size is
equal to 'DFA::nStates', which is of type uint32_t (DFAs larger than
2^32 states are currently not supported an will crash re2c).

In practice, 'stk' is not changed and 'top' is only incremented
before the cast (it's decremented afterwards. Note that the function
is self-recursive).

Fixes [-Wconversion] warning.

re2c/src/codegen/scc.cc

index 243497a8ebbf7e2beb8173b225314b0c00435657..c7dea30779574181f81b07e46d8120269bdec69a 100644 (file)
@@ -16,7 +16,7 @@ SCC::~SCC ()
 void SCC::traverse (State * x)
 {
        *top = x;
-       uint32_t k = ++top - stk;
+       const uint32_t k = static_cast<uint32_t> (++top - stk);
        x->depth = k;
 
        for (uint32_t i = 0; i < x->go.nSpans; ++i)