diff --git a/src/Expr.cc b/src/Expr.cc index 7e07a94bd2..3bcf9d96a5 100644 --- a/src/Expr.cc +++ b/src/Expr.cc @@ -220,9 +220,9 @@ bool Expr::CanAdd() const { return false; } bool Expr::CanDel() const { return false; } -TypePtr Expr::AddType() const { return nullptr; } +TypePtr Expr::AddType() const { return base_type(TYPE_VOID); } -TypePtr Expr::DelType() const { return nullptr; } +TypePtr Expr::DelType() const { return base_type(TYPE_VOID); } ValPtr Expr::Add(Frame* /* f */) { Internal("Expr::Add called"); } diff --git a/src/script_opt/Expr.cc b/src/script_opt/Expr.cc index cb2927c6de..bc8fa55248 100644 --- a/src/script_opt/Expr.cc +++ b/src/script_opt/Expr.cc @@ -730,9 +730,10 @@ ExprPtr AddExpr::BuildSub(const ExprPtr& op1, const ExprPtr& op2) { } ExprPtr AggrAddDelExpr::Reduce(Reducer* c, StmtPtr& red_stmt) { - if ( type ) - return UnaryExpr::Reduce(c, red_stmt); - + // In the future, if we use add/delete for list operations or such, + // then the following becomes germane. + // if ( type ) + // return UnaryExpr::Reduce(c, red_stmt); if ( c->Optimizing() ) op = c->UpdateExpr(op); diff --git a/testing/btest/Baseline/language.add-del-expr-void/out b/testing/btest/Baseline/language.add-del-expr-void/out new file mode 100644 index 0000000000..2da5539a69 --- /dev/null +++ b/testing/btest/Baseline/language.add-del-expr-void/out @@ -0,0 +1,3 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +error in <...>/add-del-expr-void.zeek, line 10: can't assign void value (my_any1 = add my_set[3]) +error in <...>/add-del-expr-void.zeek, line 11: can't assign void value (my_any2 = delete my_set[5]) diff --git a/testing/btest/language/add-del-expr-void.zeek b/testing/btest/language/add-del-expr-void.zeek new file mode 100644 index 0000000000..972f3b8f6b --- /dev/null +++ b/testing/btest/language/add-del-expr-void.zeek @@ -0,0 +1,13 @@ +# @TEST-DOC: checks for type-checking for add/delete expressions +# +# @TEST-EXEC-FAIL: zeek -b %INPUT >out 2>&1 +# @TEST-EXEC: TEST_DIFF_CANONIFIER=$SCRIPTS/diff-remove-abspath btest-diff out + +global my_set: set[count]; + +event zeek_init() + { + local my_any1: any = add my_set[3]; + local my_any2: any = delete my_set[5]; + print my_any1, my_any2; + }