Skip to content

Commit

Permalink
Raise error when entity aspect is missing in configuration specificat…
Browse files Browse the repository at this point in the history
…ion. Issue #1091
  • Loading branch information
NikLeberg committed Dec 12, 2024
1 parent 72b5e72 commit 511a1d8
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 0 deletions.
4 changes: 4 additions & 0 deletions src/parse.c
Original file line number Diff line number Diff line change
Expand Up @@ -9076,7 +9076,11 @@ static void p_configuration_specification(tree_t parent)

push_scope(nametab);

bool is_open = (peek() == tUSE && peek_nth(2) == tOPEN);
tree_t bind = p_binding_indication(comp);
if (!is_open && bind == NULL)
parse_error(CURRENT_LOC, "a binding indication in an explicit "
"configuration specification must contain an entity aspect");
consume(tSEMI);

if (ids != NULL) {
Expand Down
12 changes: 12 additions & 0 deletions test/parse/config.vhd
Original file line number Diff line number Diff line change
Expand Up @@ -74,3 +74,15 @@ configuration use_pack_ent of ent is
end for;
end for;
end configuration;

entity b is
end entity b;

architecture rtl of b is
component ent
end component;

for ent0 : ent; -- Error
begin
ent0: ent;
end architecture rtl;
12 changes: 12 additions & 0 deletions test/test_parse.c
Original file line number Diff line number Diff line change
Expand Up @@ -2900,6 +2900,8 @@ START_TEST(test_config)
{ 45, "cannot find architecture BAD of entity WORK.ENT" },
{ 52, "P is not a block that can be configured" },
{ 55, "instance P not found" },
{ 85, "a binding indication in an explicit configuration "
"specification must contain an entity aspect" },
{ -1, NULL }
};
expect_errors(expect);
Expand Down Expand Up @@ -2979,6 +2981,16 @@ START_TEST(test_config)
fail_unless(tree_kind(c) == T_CONFIGURATION);
lib_put(lib_work(), c);

e = parse();
fail_if(e == NULL);
fail_unless(tree_kind(e) == T_ENTITY);
lib_put(lib_work(), e);

e = parse();
fail_if(e == NULL);
fail_unless(tree_kind(e) == T_ARCH);
lib_put(lib_work(), e);

c = parse();
fail_unless(c == NULL);

Expand Down

0 comments on commit 511a1d8

Please sign in to comment.