From 1372d62186dc1f7ff708d908d13deb245a168cd1 Mon Sep 17 00:00:00 2001 From: Wilson Snyder Date: Wed, 18 Oct 2017 17:38:10 -0400 Subject: [PATCH] Remove duplicate class forward declarations. --- include/verilatedos.h | 5 +++++ src/V3EmitC.cpp | 8 +++++++- src/V3EmitCSyms.cpp | 2 +- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/include/verilatedos.h b/include/verilatedos.h index 462739752..9579efe4a 100644 --- a/include/verilatedos.h +++ b/include/verilatedos.h @@ -111,13 +111,18 @@ #if __cplusplus >= 201103L || defined(__GXX_EXPERIMENTAL_CXX0X__) # define VL_HAS_UNIQUE_PTR # define VL_HAS_UNORDERED_MAP +# define VL_HAS_UNORDERED_SET # define VL_UNIQUE_PTR std::unique_ptr # define VL_UNORDERED_MAP std::unordered_map +# define VL_UNORDERED_SET std::unordered_set # define VL_INCLUDE_UNORDERED_MAP +# define VL_INCLUDE_UNORDERED_SET #else # define VL_UNIQUE_PTR std::auto_ptr # define VL_UNORDERED_MAP std::map +# define VL_UNORDERED_SET std::set # define VL_INCLUDE_UNORDERED_MAP +# define VL_INCLUDE_UNORDERED_SET #endif //========================================================================= diff --git a/src/V3EmitC.cpp b/src/V3EmitC.cpp index 5a77b5e09..40a21bb9d 100644 --- a/src/V3EmitC.cpp +++ b/src/V3EmitC.cpp @@ -27,6 +27,7 @@ #include #include #include +#include VL_INCLUDE_UNORDERED_SET #include "V3Global.h" #include "V3String.h" @@ -1881,9 +1882,14 @@ void EmitCImp::emitInt(AstNodeModule* modp) { // Declare foreign instances up front to make C++ happy puts("class "+symClassName()+";\n"); + VL_UNORDERED_SET didClassName; for (AstNode* nodep=modp->stmtsp(); nodep; nodep = nodep->nextp()) { if (AstCell* cellp=nodep->castCell()) { - puts("class "+modClassName(cellp->modp())+";\n"); + string className = modClassName(cellp->modp()); + if (didClassName.find(className)==didClassName.end()) { + puts("class "+className+";\n"); + didClassName.insert(className); + } } } if (v3Global.opt.trace()) { diff --git a/src/V3EmitCSyms.cpp b/src/V3EmitCSyms.cpp index 2261ce6ed..5993c4aab 100644 --- a/src/V3EmitCSyms.cpp +++ b/src/V3EmitCSyms.cpp @@ -339,7 +339,7 @@ void EmitCSyms::emitSymHdr() { puts("\n// CREATORS\n"); puts(symClassName()+"("+topClassName()+"* topp, const char* namep);\n"); - puts((string)"~"+symClassName()+"() {};\n"); + puts((string)"~"+symClassName()+"() {}\n"); puts("\n// METHODS\n"); puts("inline const char* name() { return __Vm_namep; }\n");