From 559852f60b6761b403ad786a219fb68f91475ec4 Mon Sep 17 00:00:00 2001 From: Wilson Snyder Date: Mon, 2 Dec 2019 20:21:24 -0500 Subject: [PATCH] Add error when number missing value. --- src/V3Number.cpp | 18 ++++++++++-------- test_regress/t/t_number_bad.out | 10 ++++++++++ test_regress/t/t_number_bad.pl | 18 ++++++++++++++++++ test_regress/t/t_number_bad.v | 12 ++++++++++++ 4 files changed, 50 insertions(+), 8 deletions(-) create mode 100644 test_regress/t/t_number_bad.out create mode 100755 test_regress/t/t_number_bad.pl create mode 100644 test_regress/t/t_number_bad.v diff --git a/src/V3Number.cpp b/src/V3Number.cpp index 67d11248d..8b2fdfbc2 100644 --- a/src/V3Number.cpp +++ b/src/V3Number.cpp @@ -110,13 +110,12 @@ void V3Number::V3NumberCreate(AstNode* nodep, const char* sourcep, FileLine* fl) bool unbased = false; char base = '\0'; if (value_startp != sourcep) { // Has a ' - char widthn[100]; char* wp=&widthn[0]; - const char* cp=sourcep; + string widthn; + const char* cp = sourcep; for (; *cp; cp++) { if (*cp == '\'') { cp++ ; break; } - if (*cp != '_') *wp++ = *cp; + if (*cp != '_') widthn += *cp; } - *wp++ = '\0'; while (*cp == '_') cp++; if (*cp && tolower(*cp)=='s') { cp++; isSigned(true); @@ -124,13 +123,13 @@ void V3Number::V3NumberCreate(AstNode* nodep, const char* sourcep, FileLine* fl) if (*cp) { base=*cp; cp++; } value_startp = cp; - if (atoi(widthn)) { - if (atoi(widthn) < 0 || atoi(widthn) > MAX_WIDTH) { + if (atoi(widthn.c_str())) { + if (atoi(widthn.c_str()) < 0 || atoi(widthn.c_str()) > MAX_WIDTH) { // atoi might convert large number to negative, so can't tell which v3error("Unsupported: Width of number exceeds implementation limit: "< 1); + +lint( + fails => 1, + expect_filename => $Self->{golden_filename}, + ); + +ok(1); +1; diff --git a/test_regress/t/t_number_bad.v b/test_regress/t/t_number_bad.v new file mode 100644 index 000000000..b269347fd --- /dev/null +++ b/test_regress/t/t_number_bad.v @@ -0,0 +1,12 @@ +// DESCRIPTION: Verilator: Test of select from constant +// +// This file ONLY is placed into the Public Domain, for any use, +// without warranty, 2019 by Wilson Snyder. + +module t (/*AUTOARG*/); + + parameter integer FOO2 = 32'd-6; // Minus doesn't go here + parameter integer FOO3 = 32'd; + parameter integer FOO4 = 32'h; + +endmodule