mirror of
https://github.com/verilator/verilator.git
synced 2026-10-06 10:03:44 +02:00
Improve hex too many digits error (#5419).
This commit is contained in:
+14
-10
@@ -247,15 +247,7 @@ void V3Number::create(const char* sourcep) {
|
||||
product.opMul(*this, ten);
|
||||
opAdd(product, addend);
|
||||
if (product.bitsValue(width(), 4)) { // Overflowed
|
||||
static int warned = 0;
|
||||
v3error("Too many digits for "
|
||||
<< width() << " bit number: " << sourcep << '\n'
|
||||
<< ((!sized() && !warned++) ? (
|
||||
V3Error::warnMore() + "... As that number was unsized"
|
||||
+ " ('d...) it is limited to 32 bits"
|
||||
" (IEEE 1800-2023 5.7.1)\n"
|
||||
+ V3Error::warnMore() + "... Suggest adding a size to it.")
|
||||
: ""));
|
||||
warnTooMany(sourcep);
|
||||
while (*(cp + 1)) cp++; // Skip ahead so don't get multiple warnings
|
||||
}
|
||||
}
|
||||
@@ -291,7 +283,7 @@ void V3Number::create(const char* sourcep) {
|
||||
for (const char* cp = value_startp + std::strlen(value_startp) - 1; cp >= value_startp;
|
||||
cp--) {
|
||||
if (*cp != '_' && *cp != '0' && obit >= width()) {
|
||||
v3error("Too many digits for " << width() << " bit number: " << sourcep);
|
||||
warnTooMany(sourcep);
|
||||
break;
|
||||
}
|
||||
switch (std::tolower(base)) {
|
||||
@@ -379,6 +371,18 @@ void V3Number::create(const char* sourcep) {
|
||||
// m_value[0]);
|
||||
}
|
||||
|
||||
void V3Number::warnTooMany(const string& value) {
|
||||
static int warned = 0;
|
||||
v3error("Too many digits for "
|
||||
<< width() << " bit number: '" << value << "'\n"
|
||||
<< ((!sized() && !warned++)
|
||||
? (V3Error::warnMore() + "... As that number was unsized"
|
||||
+ " ('...) it is limited to 32 bits"
|
||||
" (IEEE 1800-2023 5.7.1)\n"
|
||||
+ V3Error::warnMore() + "... Suggest adding a size to it.")
|
||||
: ""));
|
||||
}
|
||||
|
||||
void V3Number::nodep(AstNode* nodep) VL_MT_STABLE {
|
||||
m_nodep = nodep;
|
||||
if (!nodep) return;
|
||||
|
||||
Reference in New Issue
Block a user