diff --git a/src/Attr.cc b/src/Attr.cc index ceea050115..69e8fde07e 100644 --- a/src/Attr.cc +++ b/src/Attr.cc @@ -243,8 +243,9 @@ void Attributes::AddAttr(AttrPtr attr, bool is_redef) // We only check the attribute after we've added it, to facilitate // generating error messages via Attributes::Describe. If the // instantiator of the object specified a null type, however, then - // that's a signal to skip the checking. - if ( type ) + // that's a signal to skip the checking. If the type is error, + // there's no point checking attributes either. + if ( type && ! IsErrorType(type->Tag()) ) CheckAttr(attr.get()); // For ADD_FUNC or DEL_FUNC, add in an implicit REDEF, since diff --git a/src/Type.cc b/src/Type.cc index e4dc489ba7..18b95277b5 100644 --- a/src/Type.cc +++ b/src/Type.cc @@ -1088,7 +1088,7 @@ void RecordType::AddField(unsigned int field, const TypeDecl* td) auto def_attr = a ? a->Find(detail::ATTR_DEFAULT) : nullptr; auto def_expr = def_attr ? def_attr->GetExpr() : nullptr; - if ( def_expr ) + if ( def_expr && ! IsErrorType(type->Tag()) ) { if ( type->Tag() == TYPE_RECORD && def_expr->GetType()->Tag() == TYPE_RECORD && ! same_type(def_expr->GetType(), type) ) diff --git a/testing/btest/Baseline/language.identifier-not-defined-error/out b/testing/btest/Baseline/language.identifier-not-defined-error/out new file mode 100644 index 0000000000..76f08afdc8 --- /dev/null +++ b/testing/btest/Baseline/language.identifier-not-defined-error/out @@ -0,0 +1,2 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +error in <...>/identifier-not-defined-error.zeek, line 12: identifier not defined: MyEnumTypo diff --git a/testing/btest/language/identifier-not-defined-error.zeek b/testing/btest/language/identifier-not-defined-error.zeek new file mode 100644 index 0000000000..1c0e006e52 --- /dev/null +++ b/testing/btest/language/identifier-not-defined-error.zeek @@ -0,0 +1,14 @@ +# @TEST-EXEC-FAIL: zeek -b %INPUT >out 2>&1 +# @TEST-EXEC: TEST_DIFF_CANONIFIER=$SCRIPTS/diff-remove-abspath btest-diff out +module MyModule; + +export { + type MyEnum: enum { + MY_ENUM_A, + MY_ENUM_B, + }; + + type MyRec: record { + a: MyEnumTypo &default=MY_ENUM_A; + }; +}