Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions regression/verilog/modules/named_port_connection1.desc
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
CORE
named_port_connection1.sv

^file .* line 8: port name a assigned twice$
^EXIT=2$
^SIGNAL=0$
--
--
10 changes: 10 additions & 0 deletions regression/verilog/modules/named_port_connection1.sv
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
module my_module(input a, b);

endmodule

module main();

// a is connected twice
my_module m1(.a(1), .a(1));

endmodule
21 changes: 11 additions & 10 deletions src/verilog/verilog_typecheck.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -133,25 +133,26 @@ void verilog_typecheckt::typecheck_port_connections(
to_verilog_named_port_connection(connection);

exprt &value = named_port_connection.value();
const irep_idt &name = named_port_connection.port().get(ID_identifier);
const irep_idt &base_name =
to_symbol_expr(named_port_connection.port()).get_identifier();

bool found=false;

std::string identifier=
id2string(symbol.module)+"."+id2string(name);
std::string full_identifier =
id2string(symbol.module) + "." + id2string(base_name);

named_port_connection.port().set(ID_identifier, identifier);
to_symbol_expr(named_port_connection.port())
.set_identifier(full_identifier);

if(assigned_ports.find(name)!=
assigned_ports.end())
if(assigned_ports.find(base_name) != assigned_ports.end())
{
throw errort().with_location(connection.source_location())
<< "port name " << name << " assigned twice";
<< "port name " << base_name << " assigned twice";
}

for(auto &port : ports)
{
if(port.get(ID_identifier) == identifier)
if(port.identifier() == full_identifier)
{
found=true;
typecheck_port_connection(value, port);
Expand All @@ -163,10 +164,10 @@ void verilog_typecheckt::typecheck_port_connections(
if(!found)
{
throw errort().with_location(connection.source_location())
<< "port name " << identifier << " not found";
<< "port name " << base_name << " not found";
}

assigned_ports.insert(identifier);
assigned_ports.insert(base_name);
}
}
else // just a list without names
Expand Down
Loading