From 5d9aafc118338c12ca58d5ca74fb320198da61f4 Mon Sep 17 00:00:00 2001 From: Brian Padalino Date: Fri, 17 Feb 2023 16:37:11 -0500 Subject: [PATCH] Adding VHDL-2019 empty record (LCS-2016-082) (#623) --- src/parse.c | 11 ++++++++--- test/parse/vhdl2019.vhd | 7 +++++++ test/test_parse.c | 13 +++++++++++++ www/features.html.in | 6 ++++++ 4 files changed, 34 insertions(+), 3 deletions(-) create mode 100644 test/parse/vhdl2019.vhd diff --git a/src/parse.c b/src/parse.c index ee43b743..969a0639 100644 --- a/src/parse.c +++ b/src/parse.c @@ -5572,6 +5572,7 @@ static type_t p_record_type_definition(ident_t id) // record element_declaration { element_declaration } end record // [ simple_name ] + // 2019: record { element_declaration } end record [ simple_name ] BEGIN("record type definition"); consume(tRECORD); @@ -5580,9 +5581,13 @@ static type_t p_record_type_definition(ident_t id) type_set_ident(r, id); mangle_type(nametab, r); - do { - p_element_declaration(r); - } while (peek() == tID); + if (peek() == tEND) + require_std(STD_19, "empty record"); + else { + do { + p_element_declaration(r); + } while (peek() == tID); + } consume(tEND); consume(tRECORD); diff --git a/test/parse/vhdl2019.vhd b/test/parse/vhdl2019.vhd new file mode 100644 index 00000000..6b6e37e4 --- /dev/null +++ b/test/parse/vhdl2019.vhd @@ -0,0 +1,7 @@ +-- LCS-2016-082: Empty record +package pack is + + type rec is record + end record ; + +end package ; diff --git a/test/test_parse.c b/test/test_parse.c index dc899102..32487f43 100644 --- a/test/test_parse.c +++ b/test/test_parse.c @@ -3720,6 +3720,18 @@ START_TEST(test_vhdl2008) } END_TEST +START_TEST(test_vhdl2019) +{ + set_standard(STD_19); + input_from_file(TESTDIR "/parse/vhdl2019.vhd"); + + tree_t e = parse(); + fail_if(e == NULL); + + fail_if_errors(); +} +END_TEST + START_TEST(test_issue416) { opt_set_int(OPT_RELAXED, 1); @@ -5237,6 +5249,7 @@ Suite *get_parse_tests(void) tcase_add_test(tc_core, test_implicit); tcase_add_test(tc_core, test_error2); tcase_add_test(tc_core, test_vhdl2008); + tcase_add_test(tc_core, test_vhdl2019); tcase_add_test(tc_core, test_issue416); tcase_add_test(tc_core, test_explicit_93); tcase_add_test(tc_core, test_explicit_08); diff --git a/www/features.html.in b/www/features.html.in index 54b65a0f..67f2e35b 100644 --- a/www/features.html.in +++ b/www/features.html.in @@ -157,4 +157,10 @@ table below. Conditional compilation 1.4 + + + LCS2016_082 + Empty Record + master + -- 2.39.2