From 87728a9ee30540087ff49abf5ffd066d029e4ade Mon Sep 17 00:00:00 2001 From: Todd Strader Date: Fri, 26 Mar 2021 18:24:31 -0400 Subject: [PATCH] Fix --public-flat-rw / DPI issue (#2858) --- src/V3EmitCSyms.cpp | 3 ++- test_regress/t/t_vpi_get.cpp | 2 ++ test_regress/t/t_vpi_get.v | 3 +++ 3 files changed, 7 insertions(+), 1 deletion(-) 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