From 8c85f2135e4a06d73f0c381da5c96beebd010d7c Mon Sep 17 00:00:00 2001 From: Jon Siwek Date: Mon, 12 Oct 2020 16:19:19 -0700 Subject: [PATCH] GH-1211: Improve error message for already-defined functions --- src/Var.cc | 6 +++++- .../Baseline/language.function-already-defined/out | 2 ++ testing/btest/language/function-already-defined.zeek | 11 +++++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 testing/btest/Baseline/language.function-already-defined/out create mode 100644 testing/btest/language/function-already-defined.zeek 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"); }