From 399384d81b6a170fe732fd59e9f026a1347f2b39 Mon Sep 17 00:00:00 2001 From: Cary R Date: Sat, 19 Dec 2015 17:18:15 -0800 Subject: [PATCH] Fix some cppcheck warnings and bugs --- Module.cc | 3 ++- cppcheck.sup | 4 ++-- elab_expr.cc | 28 ++++++++++++---------------- expr_synth.cc | 10 ++++++++-- link_const.cc | 8 ++++---- net_design.cc | 4 ++-- symbol_search.cc | 5 +++-- version.c | 6 +++--- 8 files changed, 36 insertions(+), 32 deletions(-) diff --git a/Module.cc b/Module.cc index b69a3a9504..b577410417 100644 --- a/Module.cc +++ b/Module.cc @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998-2010 Stephen Williams (steve@icarus.com) + * Copyright (c) 1998-2015 Stephen Williams (steve@icarus.com) * * This source code is free software; you can redistribute it * and/or modify it in source code form under the terms of the GNU @@ -32,6 +32,7 @@ Module::Module(LexicalScope*parent, perm_string n) { library_flag = false; is_cell = false; + is_interface = false; program_block = false; uc_drive = UCD_NONE; timescale_warn_done = false; diff --git a/cppcheck.sup b/cppcheck.sup index a149fad778..b214573da8 100644 --- a/cppcheck.sup +++ b/cppcheck.sup @@ -1,3 +1,3 @@ // These are correct and are used to find the base (zero) pin. -thisSubtraction:netlist.h:4976 -thisSubtraction:netlist.h:4985 +thisSubtraction:netlist.h:4991 +thisSubtraction:netlist.h:5000 diff --git a/elab_expr.cc b/elab_expr.cc index 53576fa412..cb0be36cad 100644 --- a/elab_expr.cc +++ b/elab_expr.cc @@ -1277,7 +1277,6 @@ unsigned PECallFunction::test_width_method_(Design*des, NetScope*scope, return 0; perm_string member_name; - ivl_type_t member_type = 0; pform_name_t use_path = path_; perm_string method_name = peek_tail_name(use_path); use_path.pop_back(); @@ -1317,11 +1316,8 @@ unsigned PECallFunction::test_width_method_(Design*des, NetScope*scope, const netclass_t* class_type = net->class_type(); int midx = class_type->property_idx_from_name(member_name); - if (midx >= 0) - member_type = class_type->get_prop_type(midx); - else - member_type = 0; - use_path = tmp_path; + ivl_type_t member_type = 0; + if (midx >= 0) member_type = class_type->get_prop_type(midx); use_darray = dynamic_cast (member_type); @@ -1410,7 +1406,7 @@ NetExpr*PECallFunction::cast_to_width_(NetExpr*expr, unsigned wid) const if (debug_elaborate) { cerr << get_fileline() << ": PECallFunction::cast_to_width_: " << "cast to " << wid - << " bits " << (signed_flag_?"signed":"unsigned") + << " bits " << (signed_flag_ ? "signed" : "unsigned") << " from expr_width()=" << expr->expr_width() << endl; } @@ -1535,7 +1531,7 @@ NetExpr* PECallFunction::elaborate_sfunc_(Design*des, NetScope*scope, PExpr*expr = parms_[0]; - verinum val (expr->has_sign()? verinum::V1 : verinum::V0, 1); + verinum val (expr->has_sign() ? verinum::V1 : verinum::V0, 1); NetEConst*sub = new NetEConst(val); sub->set_line(*this); @@ -2017,7 +2013,7 @@ static NetExpr* check_for_struct_members(const LineInfo*li, } NetESignal*sig = new NetESignal(net); - NetExpr *base = packed_base? packed_base : make_const_val(off); + NetExpr *base = packed_base ? packed_base : make_const_val(off); if (debug_elaborate) { cerr << li->get_fileline() << ": debug: check_for_struct_members: " @@ -2681,7 +2677,7 @@ unsigned PEConcat::test_width(Design*des, NetScope*scope, width_mode_t&) expr_is_string = NO; } - expr_type_ = (expr_is_string==YES)? IVL_VT_STRING : IVL_VT_LOGIC; + expr_type_ = (expr_is_string==YES) ? IVL_VT_STRING : IVL_VT_LOGIC; signed_flag_ = false; // If there is a repeat expression, then evaluate the constant @@ -3035,7 +3031,7 @@ bool PEIdent::calculate_up_do_width_(Design*des, NetScope*scope, NetExpr*wid_ex = elab_and_eval(des, scope, index_tail.lsb, -1, true); NetEConst*wid_c = dynamic_cast(wid_ex); - wid = wid_c? wid_c->value().as_ulong() : 0; + wid = wid_c ? wid_c->value().as_ulong() : 0; if (wid == 0) { cerr << index_tail.lsb->get_fileline() << ": error: " "Indexed part widths must be constant and greater than zero." @@ -3184,7 +3180,7 @@ unsigned PEIdent::test_width(Design*des, NetScope*scope, width_mode_t&mode) bool parts_defined; calculate_parts_(des, scope, msb, lsb, parts_defined); if (parts_defined) - use_width = 1 + ((msb>lsb)? (msb-lsb) : (lsb-msb)); + use_width = 1 + ((msb>lsb) ? (msb-lsb) : (lsb-msb)); else use_width = UINT_MAX; break; @@ -3218,7 +3214,7 @@ unsigned PEIdent::test_width(Design*des, NetScope*scope, width_mode_t&mode) ivl_assert(*this, 0); } - if (const netdarray_t*darray = net? net->darray_type() : 0) { + if (const netdarray_t*darray = net ? net->darray_type() : 0) { switch (use_sel) { case index_component_t::SEL_BIT: case index_component_t::SEL_BIT_LAST: @@ -3272,7 +3268,7 @@ unsigned PEIdent::test_width(Design*des, NetScope*scope, width_mode_t&mode) << net->name() << " is a net, " << "type=" << expr_type_ << ", width=" << expr_width_ - << ", signed_=" << (signed_flag_?"true":"false") + << ", signed_=" << (signed_flag_ ? "true" : "false") << ", use_depth=" << use_depth << ", packed_dimensions=" << net->packed_dimensions() << ", unpacked_dimensions=" << net->unpacked_dimensions() @@ -3936,7 +3932,7 @@ NetExpr* PEIdent::elaborate_expr(Design*des, NetScope*scope, if ( !(SYS_TASK_ARG & flags) ) { // I cannot interpret this identifier. Error message. cerr << get_fileline() << ": error: Unable to bind " - << (NEED_CONST & flags ? "parameter" : "wire/reg/memory") + << ((NEED_CONST & flags) ? "parameter" : "wire/reg/memory") << " `" << path_ << "' in `" << scope_path(scope) << "'" << endl; if (scope->need_const_func()) { @@ -5626,7 +5622,7 @@ NetEConst* PENumber::elaborate_expr(Design*, NetScope*, unsigned PEString::test_width(Design*, NetScope*, width_mode_t&) { expr_type_ = IVL_VT_BOOL; - expr_width_ = text_? verinum(text_).len() : 0; + expr_width_ = text_ ? verinum(text_).len() : 0; min_width_ = expr_width_; signed_flag_ = false; diff --git a/expr_synth.cc b/expr_synth.cc index b1a2a81653..cb8ba87f09 100644 --- a/expr_synth.cc +++ b/expr_synth.cc @@ -733,12 +733,18 @@ NetNet* NetEConcat::synthesize(Design*des, NetScope*scope, NetExpr*root) } } - if (flag == false) return 0; + if (flag == false) { + delete[]tmp; + return 0; + } ivl_assert(*this, data_type != IVL_VT_NO_TYPE); /* If this is a replication of zero just return 0. */ - if (expr_width() == 0) return 0; + if (expr_width() == 0) { + delete[]tmp; + return 0; + } /* Make a NetNet object to carry the output vector. */ perm_string path = scope->local_symbol(); diff --git a/link_const.cc b/link_const.cc index e28388bbf5..051718aafa 100644 --- a/link_const.cc +++ b/link_const.cc @@ -162,13 +162,13 @@ verinum::V Nexus::driven_value() const if ((sig->type() == NetNet::SUPPLY0) || (sig->type() == NetNet::TRI0)) { // Multiple drivers are not currently supported. - ivl_assert(*obj, val == verinum::Vz); + ivl_assert(*sig, val == verinum::Vz); val = verinum::V0; } if ((sig->type() == NetNet::SUPPLY1) || (sig->type() == NetNet::TRI1)) { // Multiple drivers are not currently supported. - ivl_assert(*obj, val == verinum::Vz); + ivl_assert(*sig, val == verinum::Vz); val = verinum::V1; } } @@ -222,13 +222,13 @@ verinum Nexus::driven_vector() const if ((sig->type() == NetNet::SUPPLY0) || (sig->type() == NetNet::TRI0)) { // Multiple drivers are not currently supported. - ivl_assert(*obj, val.len() == 0); + ivl_assert(*sig, val.len() == 0); val = verinum(verinum::V0, width); } if ((sig->type() == NetNet::SUPPLY1) || (sig->type() == NetNet::TRI1)) { // Multiple drivers are not currently supported. - ivl_assert(*obj, val.len() == 0); + ivl_assert(*sig, val.len() == 0); val = verinum(verinum::V1, width); } } diff --git a/net_design.cc b/net_design.cc index 2862815c6b..c0d03cf9fb 100644 --- a/net_design.cc +++ b/net_design.cc @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000-2013 Stephen Williams (steve@icarus.com) + * Copyright (c) 2000-2015 Stephen Williams (steve@icarus.com) * * This source code is free software; you can redistribute it * and/or modify it in source code form under the terms of the GNU @@ -890,8 +890,8 @@ void Design::add_node(NetNode*net) void Design::del_node(NetNode*net) { - assert(net->design_ == this); assert(net != 0); + assert(net->design_ == this); /* Interact with the Design::functor method by manipulating the cur and nxt pointers that it is using. */ diff --git a/symbol_search.cc b/symbol_search.cc index 951c6ad3f1..fe24e33a04 100644 --- a/symbol_search.cc +++ b/symbol_search.cc @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003-2012 Stephen Williams (steve@icarus.com) + * Copyright (c) 2003-2015 Stephen Williams (steve@icarus.com) * Copyright CERN 2012 / Stephen Williams (steve@icarus.com) * * This source code is free software; you can redistribute it @@ -66,6 +66,7 @@ static bool symbol_search(const LineInfo*li, Design*des, NetScope*scope, bool prefix_scope = false; bool recurse_flag = false; + assert(li); ivl_assert(*li, ! path.empty()); name_component_t path_tail = path.back(); path.pop_back(); @@ -94,7 +95,7 @@ static bool symbol_search(const LineInfo*li, Design*des, NetScope*scope, scope = recurse.scope; prefix_scope = true; - if (scope->is_auto() && li) { + if (scope->is_auto()) { cerr << li->get_fileline() << ": error: Hierarchical " "reference to automatically allocated item " "`" << path_tail.name << "' in path `" << path << "'" << endl; diff --git a/version.c b/version.c index e01bd89c7a..64e4178c2c 100644 --- a/version.c +++ b/version.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009 Stephen Williams (steve@icarus.com) + * Copyright (c) 2009-2015 Stephen Williams (steve@icarus.com) * * This source code is free software; you can redistribute it * and/or modify it in source code form under the terms of the GNU @@ -29,10 +29,10 @@ static void run_string(const char*txt) if (cp[0] == '%' && cp[1] != 0) { switch (cp[1]) { case 'M': - fprintf(stdout, "%u", VERSION_MAJOR); + fprintf(stdout, "%d", VERSION_MAJOR); break; case 'n': - fprintf(stdout, "%u", VERSION_MINOR); + fprintf(stdout, "%d", VERSION_MINOR); break; case 'E': fprintf(stdout, "%s", VERSION_EXTRA);