From 69c0cf151389e392171740adb7a21760f21cac06 Mon Sep 17 00:00:00 2001 From: Jon Siwek Date: Fri, 31 Jul 2020 16:24:26 -0700 Subject: [PATCH] Improve error message for an enum name conflicting with non-enum ID --- src/Type.cc | 1 + testing/btest/Baseline/language.enum-name-conflict/output | 1 + testing/btest/language/enum-name-conflict.zeek | 8 ++++++++ 3 files changed, 10 insertions(+) diff --git a/src/Type.cc b/src/Type.cc index 2f6e8b6860..a851128e68 100644 --- a/src/Type.cc +++ b/src/Type.cc @@ -1269,6 +1269,7 @@ void EnumType::CheckAndAddName(const string& module_name, const char* name, // cyclic dependencies. string fullname = make_full_var_name(module_name.c_str(), name); if ( id->Name() != fullname + || ! id->IsEnumConst() || (id->HasVal() && val != id->GetVal()->AsEnum()) || GetName() != id->GetType()->GetName() || (names.find(fullname) != names.end() && names[fullname] != val) ) diff --git a/testing/btest/Baseline/language.enum-name-conflict/output b/testing/btest/Baseline/language.enum-name-conflict/output index 606ce412f3..d0237ed056 100644 --- a/testing/btest/Baseline/language.enum-name-conflict/output +++ b/testing/btest/Baseline/language.enum-name-conflict/output @@ -2,3 +2,4 @@ error in /home/jon/pro/zeek/zeek/testing/btest/.tmp/language.enum-name-conflict/ error in /home/jon/pro/zeek/zeek/testing/btest/.tmp/language.enum-name-conflict/enum-name-conflict.zeek, line 15 and /home/jon/pro/zeek/zeek/testing/btest/.tmp/language.enum-name-conflict/enum-name-conflict.zeek, line 5: conflicting definition of enum value 'RED' in type 'b' error in /home/jon/pro/zeek/zeek/testing/btest/.tmp/language.enum-name-conflict/enum-name-conflict.zeek, line 27 and /home/jon/pro/zeek/zeek/testing/btest/.tmp/language.enum-name-conflict/enum-name-conflict.zeek, line 23: conflicting definition of enum value 'Foo::TWO' in type 'Foo::bf' error in /home/jon/pro/zeek/zeek/testing/btest/.tmp/language.enum-name-conflict/enum-name-conflict.zeek, line 32 and /home/jon/pro/zeek/zeek/testing/btest/.tmp/language.enum-name-conflict/enum-name-conflict.zeek, line 22: conflicting definition of enum value 'Foo::ONE' in type 'Foo::bf' +error in /home/jon/pro/zeek/zeek/testing/btest/.tmp/language.enum-name-conflict/enum-name-conflict.zeek, line 41 and /home/jon/pro/zeek/zeek/testing/btest/.tmp/language.enum-name-conflict/enum-name-conflict.zeek, line 38: conflicting definition of enum value 'NOPE' in type 'a' diff --git a/testing/btest/language/enum-name-conflict.zeek b/testing/btest/language/enum-name-conflict.zeek index bab788c435..d8dd50ce09 100644 --- a/testing/btest/language/enum-name-conflict.zeek +++ b/testing/btest/language/enum-name-conflict.zeek @@ -32,3 +32,11 @@ export { ONE, }; } + +module GLOBAL; + +global NOPE = 37; + +redef enum a += { + NOPE, +};