Skip to content

Commit

Permalink
Raise error when entity aspect is missing in binding indication. Issue
Browse files Browse the repository at this point in the history
  • Loading branch information
NikLeberg committed Dec 8, 2024
1 parent f3992e8 commit f486d8e
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 4 deletions.
11 changes: 7 additions & 4 deletions src/parse.c
Original file line number Diff line number Diff line change
Expand Up @@ -9003,14 +9003,17 @@ static tree_t p_entity_aspect(void)
}
}

static tree_t p_binding_indication(tree_t comp)
static tree_t p_binding_indication(tree_t comp, bool required)
{
// [ use entity_aspect ] [ generic_map_aspect ] [ port_map_aspect ]
// or with required = true
// use entity_aspect [ generic_map_aspect ] [ port_map_aspect ]

BEGIN("binding indication");

tree_t bind = NULL, unit = NULL;
if (optional(tUSE)) {
if (required || peek() == tUSE) {
consume(tUSE);
if ((bind = p_entity_aspect())) {
unit = find_binding(bind);
tree_set_ref(bind, unit);
Expand Down Expand Up @@ -9061,7 +9064,7 @@ static void p_configuration_specification(tree_t parent)

push_scope(nametab);

tree_t bind = p_binding_indication(comp);
tree_t bind = p_binding_indication(comp, true);
consume(tSEMI);

if (ids != NULL) {
Expand Down Expand Up @@ -9145,7 +9148,7 @@ static void p_component_configuration(tree_t unit)
push_scope(nametab);

// TODO: should be optional
tree_t bind = p_binding_indication(comp);
tree_t bind = p_binding_indication(comp, false);
consume(tSEMI);

tree_t bcfg = 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;
11 changes: 11 additions & 0 deletions test/test_parse.c
Original file line number Diff line number Diff line change
Expand Up @@ -2900,6 +2900,7 @@ 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, "unexpected ; while parsing binding indication, expecting use" },
{ -1, NULL }
};
expect_errors(expect);
Expand Down Expand Up @@ -2979,6 +2980,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 f486d8e

Please sign in to comment.