diff --git a/CHANGES b/CHANGES index 6b777831a1..b2bd5da1e9 100644 --- a/CHANGES +++ b/CHANGES @@ -1,4 +1,8 @@ +3.3.0-dev.426 | 2020-10-14 10:47:37 -0700 + + * GH-1211: Improve error message for already-defined functions (Jon Siwek, Corelight) + 3.3.0-dev.422 | 2020-10-13 16:26:24 -0700 * GH-1208: Use Dictionary validity assertions only during CI (Jon Siwek, Corelight) diff --git a/VERSION b/VERSION index a9fa5e6c55..a9c83441c6 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -3.3.0-dev.422 +3.3.0-dev.426 diff --git a/src/Var.cc b/src/Var.cc index fa1db6c3d1..a0adcb8f4f 100644 --- a/src/Var.cc +++ b/src/Var.cc @@ -583,7 +583,7 @@ void begin_func(IDPtr id, const char* module_name, case FUNC_FLAVOR_FUNCTION: if ( ! id->IsRedefinable() ) - id->Error("already defined"); + id->Error("already defined", t.get()); break; default: @@ -594,6 +594,10 @@ void begin_func(IDPtr id, const char* module_name, else id->SetType(t); + if ( IsErrorType(id->GetType()->Tag()) ) + reporter->FatalError("invalid definition of '%s' (see previous errors)", + id->Name()); + const auto& args = t->Params(); const auto& canon_args = id->GetType()->AsFuncType()->Params(); diff --git a/testing/btest/Baseline/language.function-already-defined/out b/testing/btest/Baseline/language.function-already-defined/out new file mode 100644 index 0000000000..fcbb88a3e5 --- /dev/null +++ b/testing/btest/Baseline/language.function-already-defined/out @@ -0,0 +1,2 @@ +error in /home/jon/pro/zeek/zeek/testing/btest/.tmp/language.function-already-defined/function-already-defined.zeek, line 4 and /home/jon/pro/zeek/zeek/testing/btest/.tmp/language.function-already-defined/function-already-defined.zeek, line 7: already defined (foo) +fatal error in /home/jon/pro/zeek/zeek/testing/btest/.tmp/language.function-already-defined/function-already-defined.zeek, line 8: invalid definition of 'foo' (see previous errors) diff --git a/testing/btest/language/function-already-defined.zeek b/testing/btest/language/function-already-defined.zeek new file mode 100644 index 0000000000..9c609a68ac --- /dev/null +++ b/testing/btest/language/function-already-defined.zeek @@ -0,0 +1,11 @@ +# @TEST-EXEC-FAIL: zeek -b %INPUT >out 2>&1 +# @TEST-EXEC: TEST_DIFF_CANONIFIER=$SCRIPTS/diff-remove-abspath btest-diff out + +function foo(a: string) + { print a; } + +function foo(a: string) + { } + +event zeek_init() + { foo("hello"); }