]> andersk Git - splint.git/blobdiff - src/transferChecks.c
*** empty log message ***
[splint.git] / src / transferChecks.c
index 9a6bcc1c3907d05e90681a0e8ecf5087b375cf1b..809db0a68d77854d5204e49869f4bd151e0effb5 100644 (file)
@@ -4002,7 +4002,7 @@ checkMetaStateTransfer (exprNode fexp, sRef fref, exprNode texp, sRef tref,
   valueTable tvalues = sRef_getValueTable (tref);
 
   DPRINTF (("Metastate transfer: from %s", exprNode_unparse (fexp)));
-
+  
   DPRINTF (("Metastate transfer: %s => %s",
            sRef_unparseFull (fref),
            sRef_unparseFull (tref)));
@@ -4046,10 +4046,28 @@ checkMetaStateTransfer (exprNode fexp, sRef fref, exprNode texp, sRef tref,
       {
        llassert (metaStateInfo_isDefined (minfo));
        
-       if (stateValue_isError (fval) || stateValue_isError (tval))
+       if (stateValue_isError (fval))
          {
            ;
          }
+       else if (stateValue_isError (tval))
+         {
+           if (sRef_isLocalVar (tref) && transferType == TT_DOASSIGN)
+             {
+               /* Local assignments just replace state. */
+               stateValue_updateValueLoc (tval, stateValue_getValue (fval), loc);
+               DPRINTF (("Update: %s", stateValue_unparse (tval)));
+             }
+           else if (transferType == TT_FCNRETURN)
+             {
+               ; /* Returning from an unannotated function */
+             }
+           else
+             {
+               DPRINTF (("Transfer to error: %s / %s", sRef_unparseFull (tref),
+                         transferType_unparse (transferType)));
+             }
+         }
        else 
          {
            DPRINTF (("Check: %s / %s / %s / %s", fkey,
@@ -4070,6 +4088,7 @@ checkMetaStateTransfer (exprNode fexp, sRef fref, exprNode texp, sRef tref,
                /* Local assignments just replace state. */
                DPRINTF (("No transfer error assigning to local: %s", msg));
                stateValue_updateValueLoc (tval, stateValue_getValue (fval), loc);
+               DPRINTF (("Update: %s", stateValue_unparse (tval)));
              }
            else
              {
This page took 0.155784 seconds and 4 git commands to generate.