fixed signdness detection for expressions with reals
authorClifford Wolf <clifford@clifford.at>
Sat, 21 Jun 2014 19:41:13 +0000 (21:41 +0200)
committerClifford Wolf <clifford@clifford.at>
Sat, 21 Jun 2014 19:41:13 +0000 (21:41 +0200)
frontends/ast/genrtlil.cc

index 1f0ef4450019fbcf8edd55d8e741f60b9396e586..9f18efce09518fc34e0e85f54dfaa2c6836c44a2 100644 (file)
@@ -594,6 +594,10 @@ void AstNode::detectSignWidthWorker(int &width_hint, bool &sign_hint, bool *foun
        AstNode *range = NULL;
        AstNode *id_ast = NULL;
 
+       bool local_found_real = false;
+       if (found_real == NULL)
+               found_real = &local_found_real;
+
        switch (type)
        {
        case AST_CONSTANT:
@@ -603,8 +607,7 @@ void AstNode::detectSignWidthWorker(int &width_hint, bool &sign_hint, bool *foun
                break;
 
        case AST_REALVALUE:
-               if (found_real)
-                       *found_real = true;
+               *found_real = true;
                width_hint = std::max(width_hint, 32);
                break;
 
@@ -787,6 +790,9 @@ void AstNode::detectSignWidthWorker(int &width_hint, bool &sign_hint, bool *foun
                log_error("Don't know how to detect sign and width for %s node at %s:%d!\n",
                                type2str(type).c_str(), filename.c_str(), linenum);
        }
+
+       if (*found_real)
+               sign_hint = true;
 }
 
 // detect sign and width of an expression