diff --git a/src/V3Width.cpp b/src/V3Width.cpp index f35bcebb0..1571a7081 100644 --- a/src/V3Width.cpp +++ b/src/V3Width.cpp @@ -7675,11 +7675,11 @@ class WidthVisitor final : public VNVisitor { // SIGNED/DOUBLE METHODS AstNodeExpr* checkCvtUS(AstNodeExpr* nodep) { - if (nodep && nodep->isDouble()) { - nodep->v3error("Expected integral (non-" << nodep->dtypep()->prettyDTypeNameQ() - << ") input to " - << nodep->backp()->prettyTypeName()); - nodep = spliceCvtS(nodep, true, 32); + if (nodep && nodep->dtypep()->skipRefp()->isDouble()) { + nodep->v3warn(REALCVT, + "Implicit conversion of real to integer; expected integral input to " + << nodep->backp()->prettyTypeName()); + nodep = spliceCvtS(nodep, false, 32); } return nodep; } diff --git a/test_regress/t/t_var_types_bad.out b/test_regress/t/t_var_types_bad.out index f60d10048..89cb32d5e 100644 --- a/test_regress/t/t_var_types_bad.out +++ b/test_regress/t/t_var_types_bad.out @@ -15,11 +15,8 @@ : ... note: In instance 't' 46 | d_real[0] = 1'b1; | ^ -%Error: t/t_var_types_bad.v:46:7: Expected integral (non-'real') input to SEL - : ... note: In instance 't' - 46 | d_real[0] = 1'b1; - | ^~~~~~ -%Warning-REALCVT: t/t_var_types_bad.v:46:7: Implicit conversion of real to integer +%Warning-REALCVT: t/t_var_types_bad.v:46:7: Implicit conversion of real to integer; expected integral input to SEL + : ... note: In instance 't' 46 | d_real[0] = 1'b1; | ^~~~~~ ... For warning description see https://verilator.org/warn/REALCVT?v=latest @@ -28,11 +25,8 @@ : ... note: In instance 't' 47 | d_realtime[0] = 1'b1; | ^ -%Error: t/t_var_types_bad.v:47:7: Expected integral (non-'real') input to SEL - : ... note: In instance 't' - 47 | d_realtime[0] = 1'b1; - | ^~~~~~~~~~ -%Warning-REALCVT: t/t_var_types_bad.v:47:7: Implicit conversion of real to integer +%Warning-REALCVT: t/t_var_types_bad.v:47:7: Implicit conversion of real to integer; expected integral input to SEL + : ... note: In instance 't' 47 | d_realtime[0] = 1'b1; | ^~~~~~~~~~ %Error: Exiting due to