]> andersk Git - splint.git/blobdiff - src/constraintGeneration.c
Prewinter break editing commit.
[splint.git] / src / constraintGeneration.c
index 2d4d64942b335071273ee8b531f23a9d81fa8eba..a14a269cf66a0384ee3b292a9c0c72061a9801be 100644 (file)
@@ -3,6 +3,8 @@
 ** constraintList.c
 */
 
+//#define DEBUGPRINT 1
+
 # include <ctype.h> /* for isdigit */
 # include "lclintMacros.nf"
 # include "basic.h"
 # include "exprNodeSList.h"
 
 # include "exprData.i"
-# include "exprDataQuite.i"
+//# include "exprDataQuite.i"
+
+#ifndef exprNode_isError
+#warning wtf
+# define exprNode_isError(e)          ((e) == exprNode_undefined)
+#else
+#warning strange
+#endif
+
+#define myexprNode_isError(e)        ((e) == exprNode_undefined)
+
+
 
 bool /*@alt void@*/ exprNode_generateConstraints (/*@temp@*/ exprNode e);
 static bool exprNode_handleError( exprNode p_e);
@@ -36,6 +49,17 @@ exprNode makeDataTypeConstraints (exprNode e);
 constraintList constraintList_makeFixedArrayConstraints (sRefSet s);
 constraintList checkCall (exprNode fcn, exprNodeList arglist);
 
+bool exprNode_testd()
+{
+  /*        if ( ( (exprNode_isError  ) ) )
+         {
+         }
+        if ( ( (e_1  ) ) )
+         {
+         }
+  */
+}
+
 bool exprNode_isUnhandled (exprNode e)
 {
   llassert( exprNode_isDefined(e) );
@@ -103,12 +127,12 @@ bool /*@alt void@*/ exprNode_generateConstraints (/*@temp@*/ exprNode e)
   if (exprNode_isUnhandled (e) )
     {
       DPRINTF( (message("Warning ignoring %s", exprNode_unparse (e) ) ) );
-        e->requiresConstraints = constraintList_new();
-       e->ensuresConstraints = constraintList_new();
-       e->trueEnsuresConstraints = constraintList_new();
-       e->falseEnsuresConstraints = constraintList_new();
-       llassert(FALSE);
-       return FALSE;
+      e->requiresConstraints = constraintList_new();
+      e->ensuresConstraints = constraintList_new();
+      e->trueEnsuresConstraints = constraintList_new();
+      e->falseEnsuresConstraints = constraintList_new();
+      //  llassert(FALSE);
+      return FALSE;
     }
 
   
@@ -196,7 +220,9 @@ bool exprNode_stmt (exprNode e)
        {
          return exprNode_multiStatement (e );
        }
-      //  llassert(FALSE);
+      BPRINTF( (message ("Ignoring non-statement %s", exprNode_unparse(e) ) ) );
+      return TRUE;
+      //      llassert(FALSE);
     }
  
   DPRINTF (("Stmt") );
@@ -286,7 +312,7 @@ constraintList constraintList_makeFixedArrayConstraints (sRefSet s)
  
   sRefSet_elements (s, el)
     {
-    llassert (el);
+      //    llassert (el);
     if (sRef_isFixedArray(el) )
       {
        int s;
@@ -393,6 +419,16 @@ bool exprNode_multiStatement (exprNode e)
       test =   exprData_getTripleTest (forPred->edata);
       inc  =   exprData_getTripleInc (forPred->edata);
 
+      //      if ( ( (exprNode_isError (test) || (exprNode_isError(init) ) || (exprNode_isError) ) ) )
+      //            if ( ( (myexprNode_isError (test) || (myexprNode_isError(init) ) || (myexprNode_isError) ) ) )
+
+      //if ( ( (exprNode_isError  ) ) )
+            if ( ( (exprNode_isError (test) || (exprNode_isError(init) ) ) || (exprNode_isError (inc) ) ) )
+       {
+         BPRINTF ((message ("strange for statement:%s, ignoring it", exprNode_unparse(e) ) ) );
+         return ret;
+       }
+      
       test->trueEnsuresConstraints =  exprNode_traversTrueEnsuresConstraints(test);
       //      e->requiresConstraints = reflectChanges (body->requiresConstraints, test->trueEnsuresConstraints);
       e->requiresConstraints = reflectChanges (e->requiresConstraints, test->ensuresConstraints);
@@ -664,7 +700,7 @@ bool exprNode_exprTraverse (exprNode e, bool definatelv, bool definaterv,  filel
   exprData data;
   constraint cons;
 
-     if (exprNode_handleError (e))
+     if (exprNode_isError(e) )
      {
        return FALSE;
      }
@@ -677,6 +713,10 @@ bool exprNode_exprTraverse (exprNode e, bool definatelv, bool definaterv,  filel
    e->trueEnsuresConstraints = constraintList_new();;
    e->falseEnsuresConstraints = constraintList_new();;
 
+   if (exprNode_isUnhandled (e) )
+     {
+       return FALSE;
+     }
    //   e = makeDataTypeConstraints (e);
  
    handledExprNode = TRUE;
@@ -758,11 +798,13 @@ bool exprNode_exprTraverse (exprNode e, bool definatelv, bool definaterv,  filel
       lltok_unparse (exprData_getOpTok (data));
       exprNode_exprTraverse (t2, definatelv, TRUE, sequencePoint );
 
-      //      DPRINTF ( ("Doing ASSign"));
-      cons =  constraint_makeEnsureEqual (t1, t2, sequencePoint);
+      /* this test is nessecary because some expressions generate a null expression node.  function pointer do that -- drl */
+      if ( (!exprNode_isError (t1))  &&  (!exprNode_isError(t2)) )
+       {
+         cons =  constraint_makeEnsureEqual (t1, t2, sequencePoint);
+         e->ensuresConstraints = constraintList_add(e->ensuresConstraints, cons);
+       }
       
-      e->ensuresConstraints = constraintList_add(e->ensuresConstraints, cons);
-
       break;
     case XPR_OP:
       t1 = exprData_getOpA (data);
@@ -1251,3 +1293,10 @@ DPRINTF( (message (
   return ret;
 }
 
+
+#ifndef exprNode_isError
+#warning wtf
+# define exprNode_isError(e)          ((e) == exprNode_undefined)
+#else
+#warning strange
+#endif
This page took 0.201893 seconds and 4 git commands to generate.