Bugs:
authorbdemsky <bdemsky>
Tue, 18 May 2004 04:31:35 +0000 (04:31 +0000)
committerbdemsky <bdemsky>
Tue, 18 May 2004 04:31:35 +0000 (04:31 +0000)
1) Sources file assumed filesystem example
2) Bug where we were generating bad code for computing cheapest repair
3) Bug where we were generating if condition for typechecks when we shouldn't be.

Repair/RepairCompiler/MCC/IR/DotExpr.java
Repair/RepairCompiler/MCC/IR/RepairGenerator.java
Repair/RepairCompiler/MCC/IR/Sources.java

index 505459f6846caae342d7caf5d34de0a8549beca5..62fbe050580f1094de3bead0d7e31366ba704ba8 100755 (executable)
@@ -250,12 +250,16 @@ public class DotExpr extends Expr {
                } else if (DOTYPECHECKS) {
                    writer.outputline("bool "+typevar.getSafeSymbol()+"=assertvalidtype(" + dest.getSafeSymbol() + ", " + this.td.getId() + ");");
                }
                } else if (DOTYPECHECKS) {
                    writer.outputline("bool "+typevar.getSafeSymbol()+"=assertvalidtype(" + dest.getSafeSymbol() + ", " + this.td.getId() + ");");
                }
-               writer.outputline("if (!"+typevar.getSafeSymbol()+")");
-               writer.startblock();
-               writer.outputline(dest.getSafeSymbol()+"=0;");
-               if (DONULL)
-                   writer.outputline(ptr + "(" + leftd.getSafeSymbol() + " + " + offset.getSafeSymbol() + ")=0;");
-               writer.endblock();
+
+               if (DOTYPECHECKS||DOMEMCHECKS) {
+                   writer.outputline("if (!"+typevar.getSafeSymbol()+")");
+                   writer.startblock();
+                   writer.outputline(dest.getSafeSymbol()+"=0;");
+                   if (DONULL)
+                       writer.outputline(ptr + "(" + leftd.getSafeSymbol() + " + " + offset.getSafeSymbol() + ")=0;");
+                   writer.endblock();
+               }
+
                writer.endblock();
            }
            writer.endblock();
                writer.endblock();
            }
            writer.endblock();
index 7921577c12624606d5e3c9b7e47253c817ce9268..d8da17629d2a5c840fd00e3db36c49c0855fe9bc 100755 (executable)
@@ -767,14 +767,14 @@ public class RepairGenerator {
                            boolean negate=dpred.isNegated();
                            VarDescriptor predvalue=VarDescriptor.makeNew("Predicatevalue");
                            p.generate(cr,predvalue);
                            boolean negate=dpred.isNegated();
                            VarDescriptor predvalue=VarDescriptor.makeNew("Predicatevalue");
                            p.generate(cr,predvalue);
+                           if (k==0)
+                               cr.outputline("int "+costvar.getSafeSymbol()+"=0;");
+
                            if (negate)
                                cr.outputline("if (maybe||"+predvalue.getSafeSymbol()+")");
                            else
                                cr.outputline("if (maybe||!"+predvalue.getSafeSymbol()+")");
                            if (negate)
                                cr.outputline("if (maybe||"+predvalue.getSafeSymbol()+")");
                            else
                                cr.outputline("if (maybe||!"+predvalue.getSafeSymbol()+")");
-                           if (k==0)
-                               cr.outputline("int "+costvar.getSafeSymbol()+"="+cost.getCost(dpred)+";");
-                           else
-                               cr.outputline(costvar.getSafeSymbol()+"+="+cost.getCost(dpred)+";");
+                           cr.outputline(costvar.getSafeSymbol()+"+="+cost.getCost(dpred)+";");
                        }
 
                        if(!first) {
                        }
 
                        if(!first) {
index bde5cc90ed0a300b985f7d5d7fc94249b32df820..5d11a57d090ddccccd2ce10f2a057555fd1ddfbf 100755 (executable)
@@ -13,9 +13,9 @@ public class Sources {
        SetDescriptor usedblock=(SetDescriptor)state.stSets.get("UsedBlock");
        SetDescriptor usedinode=(SetDescriptor)state.stSets.get("UsedInode");
 
        SetDescriptor usedblock=(SetDescriptor)state.stSets.get("UsedBlock");
        SetDescriptor usedinode=(SetDescriptor)state.stSets.get("UsedInode");
 
-       if (usedblock.isSubset(sd))
+       if (usedblock!=null&&usedblock.isSubset(sd))
            return true;
            return true;
-       if (usedinode.isSubset(sd))
+       if (usedinode!=null&&usedinode.isSubset(sd))
            return true;
 
        return false;
            return true;
 
        return false;
@@ -27,9 +27,9 @@ public class Sources {
        SetDescriptor usedblock=(SetDescriptor)state.stSets.get("UsedBlock");
        SetDescriptor usedinode=(SetDescriptor)state.stSets.get("UsedInode");
 
        SetDescriptor usedblock=(SetDescriptor)state.stSets.get("UsedBlock");
        SetDescriptor usedinode=(SetDescriptor)state.stSets.get("UsedInode");
 
-       if (usedblock.isSubset(sd))
+       if (usedblock!=null&&usedblock.isSubset(sd))
            return (SetDescriptor)state.stSets.get("FreeBlock");
            return (SetDescriptor)state.stSets.get("FreeBlock");
-       if (usedinode.isSubset(sd))
+       if (usedinode!=null&&usedinode.isSubset(sd))
            return (SetDescriptor)state.stSets.get("FreeInode");
 
        return null;
            return (SetDescriptor)state.stSets.get("FreeInode");
 
        return null;