diff --git a/src/Type.cc b/src/Type.cc index efe3d254c5..92c1db6a1c 100644 --- a/src/Type.cc +++ b/src/Type.cc @@ -1091,6 +1091,9 @@ EnumType::EnumType(const EnumType* e) names[it->first] = it->second; vals = e->vals; + + for ( auto& kv : vals ) + ::Ref(kv.second); } EnumType* EnumType::ShallowClone() diff --git a/testing/btest/Baseline/language.enum-multiple-decls/out b/testing/btest/Baseline/language.enum-multiple-decls/out new file mode 100644 index 0000000000..a2628c1e09 --- /dev/null +++ b/testing/btest/Baseline/language.enum-multiple-decls/out @@ -0,0 +1 @@ +ONE diff --git a/testing/btest/language/enum-multiple-decls.zeek b/testing/btest/language/enum-multiple-decls.zeek new file mode 100644 index 0000000000..f921ca120f --- /dev/null +++ b/testing/btest/language/enum-multiple-decls.zeek @@ -0,0 +1,10 @@ +# @TEST-EXEC: zeek -b %INPUT >out +# @TEST-EXEC: btest-diff out + +# At the moment, it's legal to allow a double definitions. Internally, the +# reason/comment is: "so that we can define an enum both in a *.bif and *.zeek +# for avoiding cyclic dependencies." + +type myenum: enum { ONE = 0x01 }; +type myenum: enum { ONE = 0x01 }; +print ONE;