From 87c01c55c05a13bf2a471a8600346809ab85040d Mon Sep 17 00:00:00 2001 From: Martin Whitaker Date: Mon, 14 May 2018 21:30:56 +0100 Subject: [PATCH] Don't allow non-vectorable arguments to $signed/$unsigned. This led to an assertion failure in many cases (see br1029). 1364-2012 indicates it is illegal. --- elab_expr.cc | 9 ++++++++- vhdlpp/std_funcs.cc | 4 ++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/elab_expr.cc b/elab_expr.cc index 8722039c1..e5940801b 100644 --- a/elab_expr.cc +++ b/elab_expr.cc @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999-2017 Stephen Williams (steve@icarus.com) + * Copyright (c) 1999-2018 Stephen Williams (steve@icarus.com) * Copyright CERN 2013 / Stephen Williams (steve@icarus.com) * * This source code is free software; you can redistribute it @@ -1456,6 +1456,13 @@ NetExpr* PECallFunction::elaborate_sfunc_(Design*des, NetScope*scope, return 0; } + if (!type_is_vectorable(expr_type_)) { + cerr << get_fileline() << ": error: The argument to " + << name << " must be a vector type." << endl; + des->errors += 1; + return 0; + } + if (debug_elaborate) { cerr << get_fileline() << ": PECallFunction::elaborate_sfunc_: " << name << " expression is the argument cast to expr_wid=" << expr_wid << endl; diff --git a/vhdlpp/std_funcs.cc b/vhdlpp/std_funcs.cc index 4e4a992f4..2880bba98 100644 --- a/vhdlpp/std_funcs.cc +++ b/vhdlpp/std_funcs.cc @@ -1,5 +1,5 @@ /* - * Copyright CERN 2016 + * Copyright CERN 2016-2018 * @author Maciej Suminski (maciej.suminski@cern.ch) * * This source code is free software; you can redistribute it @@ -201,7 +201,7 @@ void preload_std_funcs(void) args = new list(); args->push_back(new InterfacePort(&primitive_REAL)); register_std_subprogram(new SubprogramBuiltin(perm_string::literal("integer"), - perm_string::literal("$signed"), + perm_string::literal("int'"), args, &primitive_INTEGER)); /* function std_logic_vector