diff --git a/lib/checkbufferoverrun.cpp b/lib/checkbufferoverrun.cpp old mode 100644 new mode 100755 index 4492d5100..f304d1890 --- a/lib/checkbufferoverrun.cpp +++ b/lib/checkbufferoverrun.cpp @@ -999,6 +999,8 @@ void CheckBufferOverrun::objectIndex() if (v.lifetimeKind != ValueFlow::Value::LifetimeKind::Address) continue; const Variable *var = v.tokvalue->variable(); + if (!var) + continue; if (var->isReference()) continue; if (var->isRValueReference()) diff --git a/test/testbufferoverrun.cpp b/test/testbufferoverrun.cpp old mode 100644 new mode 100755 index d8a65410c..ea7435d4c --- a/test/testbufferoverrun.cpp +++ b/test/testbufferoverrun.cpp @@ -4750,6 +4750,15 @@ private: " free(*str);\n" "}\n", "test.c"); ASSERT_EQUALS("", errout.str()); + + check("template \n" + "using vector = Eigen::Matrix;\n" + "template \n" + "void scharr(image2d>& out) {\n" + " vector* out_row = &out(r, 0);\n" + " out_row[c] = vector(1,2);\n" + "}\n"); + ASSERT_EQUALS("", errout.str()); } };