diff --git a/src/V3EmitCSyms.cpp b/src/V3EmitCSyms.cpp index fa7df71fc..a389d6a7b 100644 --- a/src/V3EmitCSyms.cpp +++ b/src/V3EmitCSyms.cpp @@ -330,7 +330,8 @@ class EmitCSyms final : EmitCBaseVisitor { virtual void visit(AstVar* nodep) override { nameCheck(nodep); iterateChildren(nodep); - if (nodep->isSigUserRdPublic()) m_modVars.emplace_back(std::make_pair(m_modp, nodep)); + if (nodep->isSigUserRdPublic() && !m_cfuncp) + m_modVars.emplace_back(std::make_pair(m_modp, nodep)); } virtual void visit(AstCoverDecl* nodep) override { // Assign numbers to all bins, so we know how big of an array to use diff --git a/test_regress/t/t_vpi_get.cpp b/test_regress/t/t_vpi_get.cpp index ba97e83fb..b07104480 100644 --- a/test_regress/t/t_vpi_get.cpp +++ b/test_regress/t/t_vpi_get.cpp @@ -202,6 +202,8 @@ int mon_check() { return 0; // Ok } +void dpi_print(const char* somestring) { printf("SOMESTRING = %s\n", somestring); } + //====================================================================== #ifdef IS_VPI diff --git a/test_regress/t/t_vpi_get.v b/test_regress/t/t_vpi_get.v index 93191301c..0782339c1 100644 --- a/test_regress/t/t_vpi_get.v +++ b/test_regress/t/t_vpi_get.v @@ -12,6 +12,8 @@ import "DPI-C" context function int mon_check(); `endif +import "DPI-C" function void dpi_print(input string somestring); + `ifdef VERILATOR_COMMENTS `define PUBLIC_FLAT_RD /*verilator public_flat_rd*/ `define PUBLIC_FLAT_RW /*verilator public_flat_rw @(posedge clk)*/ @@ -54,6 +56,7 @@ extern "C" int mon_check(); // Test loop initial begin + dpi_print("foo"); `ifdef VERILATOR status = $c32("mon_check()"); `endif