diff --git a/dynare++/tl/cc/tl_static.cc b/dynare++/tl/cc/tl_static.cc index 54c997c5e..03a7b312d 100644 --- a/dynare++/tl/cc/tl_static.cc +++ b/dynare++/tl/cc/tl_static.cc @@ -2,8 +2,11 @@ #include "tl_static.hh" #include "pascal_triangle.hh" +#include "tl_exception.hh" #include +#include +#include /* Note that we allow for repeated calls of |init|. This is not normal and the only purpose of allowing this is the test suite. */ @@ -29,6 +32,10 @@ namespace TLStatic void init(int dim, int nvar) { + // Check that tensor indices will not overflow (they are stored as signed int, hence on 31 bits) + if (std::log2(nvar)*dim > std::numeric_limits::digits) + throw TLException(__FILE__, __LINE__, "Problem too large, you should decrease the approximation order"); + std::lock_guard{mut}; ebundle.generateUpTo(dim); pbundle.generateUpTo(dim);