diff --git a/src/script_opt/Expr.cc b/src/script_opt/Expr.cc index 3e8a71ce90..ca87c83bcf 100644 --- a/src/script_opt/Expr.cc +++ b/src/script_opt/Expr.cc @@ -894,7 +894,7 @@ bool AddToExpr::IsReduced(Reducer* c) const if ( tag == TYPE_TABLE ) return op1->IsReduced(c) && op2->IsReduced(c); - if ( tag == TYPE_VECTOR && same_type(t, op2->GetType()) ) + if ( tag == TYPE_VECTOR && IsVector(op2->GetType()->Tag()) && same_type(t, op2->GetType()) ) return op1->IsReduced(c) && op2->IsReduced(c); return NonReduced(this); @@ -923,7 +923,8 @@ ExprPtr AddToExpr::Reduce(Reducer* c, StmtPtr& red_stmt) red_stmt = MergeStmts(red_stmt1, red_stmt2); - if ( tag == TYPE_VECTOR && ! same_type(t, op2->GetType()) ) + if ( tag == TYPE_VECTOR && + (! IsVector(op2->GetType()->Tag()) || ! same_type(t, op2->GetType())) ) { auto append = make_intrusive(op1->Duplicate(), op2); append->SetOriginal(ThisPtr()); diff --git a/src/script_opt/ZAM/Ops.in b/src/script_opt/ZAM/Ops.in index 8051fe4b1f..2d555aaaee 100644 --- a/src/script_opt/ZAM/Ops.in +++ b/src/script_opt/ZAM/Ops.in @@ -402,7 +402,8 @@ eval $1.re_val->AddTo(frame[z.v1].re_val, false); unary-op AddVecToVec op1-read -eval $1.vector_val->AddTo(frame[z.v1].vector_val, false); +eval if ( ! $1.vector_val->AddTo(frame[z.v1].vector_val, false) ) + ZAM_run_time_error(z.loc, "incompatible vector element assignment"); unary-op AddTableToTable op1-read diff --git a/testing/btest/Baseline.zam/language.vector-any-append/.stderr b/testing/btest/Baseline.zam/language.vector-any-append/.stderr new file mode 100644 index 0000000000..8e346e54f3 --- /dev/null +++ b/testing/btest/Baseline.zam/language.vector-any-append/.stderr @@ -0,0 +1,2 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +runtime error in <...>/vector-any-append.zeek, line 63: incompatible vector element assignment diff --git a/testing/btest/Baseline.zam/language.vector-any-append/out b/testing/btest/Baseline.zam/language.vector-any-append/out new file mode 100644 index 0000000000..5345b03b2d --- /dev/null +++ b/testing/btest/Baseline.zam/language.vector-any-append/out @@ -0,0 +1,6 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +[0, 1, 2, 3] +[4, 0, 1, 2, 3] +[1, 2, 3, [4, 5]], 4, count, count, vector of count +[[r=r], [r=r], [s=s], [s=s]] +[a, -3]