diff --git a/src/parse.y b/src/parse.y index b0668163d3..1cc52b0a2a 100644 --- a/src/parse.y +++ b/src/parse.y @@ -1387,9 +1387,22 @@ decl: build_global($2, $3, $4, $5, $6, VAR_CONST); } - | TOK_REDEF global_id opt_type init_class opt_init opt_attr ';' + | TOK_REDEF global_id { + if ( $2->IsType() ) + { + auto tag = $2->GetType()->Tag(); + auto tstr = type_name(tag); + if ( tag == TYPE_RECORD || tag == TYPE_ENUM ) + yyerror(zeek::util::fmt("redef of %s type %s is missing %s keyword", + tstr, $2->Name(), tstr)); + else + yyerror(zeek::util::fmt("can not redef %s type %s", tstr, $2->Name())); + + YYERROR; // bail + } + } opt_type init_class opt_init opt_attr ';' { - build_global($2, $3, $4, $5, $6, VAR_REDEF); + build_global($2, $4, $5, $6, $7, VAR_REDEF); } | TOK_REDEF TOK_ENUM global_id TOK_ADD_TO '{' diff --git a/testing/btest/Baseline/language.redef-missing-type-2/out b/testing/btest/Baseline/language.redef-missing-type-2/out new file mode 100644 index 0000000000..62815219ef --- /dev/null +++ b/testing/btest/Baseline/language.redef-missing-type-2/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 <...>/redef-missing-type.zeek, line 6: redef of enum type Color is missing enum keyword, at or near "Color" diff --git a/testing/btest/Baseline/language.redef-missing-type-3/out b/testing/btest/Baseline/language.redef-missing-type-3/out new file mode 100644 index 0000000000..092a2a73b9 --- /dev/null +++ b/testing/btest/Baseline/language.redef-missing-type-3/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 <...>/redef-missing-type.zeek, line 7: redef of enum type Color is missing enum keyword, at or near "Color" diff --git a/testing/btest/Baseline/language.redef-missing-type-4/out b/testing/btest/Baseline/language.redef-missing-type-4/out new file mode 100644 index 0000000000..aeed6883f8 --- /dev/null +++ b/testing/btest/Baseline/language.redef-missing-type-4/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 <...>/redef-missing-type.zeek, line 2: syntax error, at or near "count" diff --git a/testing/btest/Baseline/language.redef-missing-type-5/out b/testing/btest/Baseline/language.redef-missing-type-5/out new file mode 100644 index 0000000000..0667465f0c --- /dev/null +++ b/testing/btest/Baseline/language.redef-missing-type-5/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 <...>/redef-missing-type.zeek, line 2: can not redef table type string_set, at or near "string_set" diff --git a/testing/btest/Baseline/language.redef-missing-type-6/out b/testing/btest/Baseline/language.redef-missing-type-6/out new file mode 100644 index 0000000000..588c8257a2 --- /dev/null +++ b/testing/btest/Baseline/language.redef-missing-type-6/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 <...>/redef-missing-type.zeek, line 3: can not redef vector type sv, at or near "sv" diff --git a/testing/btest/Baseline/language.redef-missing-type/out b/testing/btest/Baseline/language.redef-missing-type/out new file mode 100644 index 0000000000..03507b2bc7 --- /dev/null +++ b/testing/btest/Baseline/language.redef-missing-type/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 <...>/redef-missing-type.zeek, line 8: redef of record type MyRecord is missing record keyword, at or near "MyRecord" diff --git a/testing/btest/language/redef-missing-type.zeek b/testing/btest/language/redef-missing-type.zeek new file mode 100644 index 0000000000..5119dc6237 --- /dev/null +++ b/testing/btest/language/redef-missing-type.zeek @@ -0,0 +1,45 @@ +# @TEST-EXEC-FAIL: zeek -b %INPUT >out 2>&1 +# @TEST-EXEC: TEST_DIFF_CANONIFIER=$SCRIPTS/diff-remove-abspath btest-diff out + +type MyRecord: record { + s1: string; +}; + +redef MyRecord += { + s2: string; +}; + + +# @TEST-START-NEXT +type Color: enum { + RED, + GREEN, +}; + +redef Color += { + BLUE, +}; + +# @TEST-START-NEXT +type Color: enum { + RED, + GREEN, +}; + +# This is very bogus. +redef Color: enum += { + BLUE, +}; + +# @TEST-START-NEXT +# ...more bogus things. +redef count += { 1 }; + +# @TEST-START-NEXT +# ...more bogus things. +redef string_set += { &log }; + +# @TEST-START-NEXT +# ...also bogus. +type sv: vector of string; +redef sv += { 1 };