]> andersk Git - splint.git/blobdiff - src/constraintExpr.c
Improved tracking of state change locations. Added +showdeephistory
[splint.git] / src / constraintExpr.c
index c40a31f2848d4d3b2144e29445d82576068ad77e..3dcd6666fa180dc77eff323e943d91614f767077 100644 (file)
@@ -435,6 +435,10 @@ constraintExpr constraintExpr_makeExprNode (exprNode e)
    {
    case XPR_SIZEOF:
      t = exprData_getSingle (data);
+     while (exprNode_isInParens (t) )
+       {
+        t = exprData_getUopNode (t->edata);
+       }
      s = exprNode_getSref (t);
      if (sRef_isFixedArray(s) )
       {
@@ -443,6 +447,11 @@ constraintExpr constraintExpr_makeExprNode (exprNode e)
        size = (int) sRef_getArraySize(s);
        ret = constraintExpr_makeIntLiteral (size);
       }
+     else if (exprNode_isStringLiteral (t))
+      {
+       cstring str = multiVal_forceString (exprNode_getValue(t));
+       ret = constraintExpr_makeIntLiteral (size_toLong (cstring_length (str) + 1));
+      } 
      else
        {
         DPRINTF ((message ("could not determine the size of %s", exprNode_unparse (e) ) ) );
@@ -508,13 +517,13 @@ constraintExpr constraintExpr_makeExprNode (exprNode e)
    case XPR_PREOP:
       t = exprData_getUopNode (data);
       tok =  exprData_getUopTok (data);
-      if (lltok_isInc_Op (tok) )
+      if (lltok_isIncOp (tok))
        {
          constraintExpr temp;
          temp = constraintExpr_makeExprNode(t);
          ret = constraintExpr_makeIncConstraintExpr(temp);
        }
-      else if (lltok_isDec_Op (tok) )
+      else if (lltok_isDecOp (tok))
        {
          constraintExpr temp;
          temp = constraintExpr_makeExprNode(t);
@@ -682,7 +691,7 @@ constraintExpr constraintExpr_parseMakeUnaryOp (lltok op, constraintExpr cexpr)
       ret->data = constraintExprData_unaryExprSetOp (ret->data, MAXREAD);
       break;
     default:
-      llfatalbug(message("Unhandled Operation in Constraint") );
+      llfatalbug (message ("Unhandled operation in constraint: %s", lltok_unparse (op)));
     }
   return ret;
 }
This page took 0.070107 seconds and 4 git commands to generate.