Change the name of some IR fields from .expr to .data, as .expr
doesn't convey any useful meaning to the reader.
Extra sanity check for PutI: check that the .data type to be put'd
matches the stated array element type in the .descr field.
git-svn-id: svn://svn.valgrind.org/vex/trunk@285 8f6e269a-dfd6-0310-a8e1-e2731360e62c
diff --git a/priv/ir/irdefs.c b/priv/ir/irdefs.c
index 38c300b..b82b5ac 100644
--- a/priv/ir/irdefs.c
+++ b/priv/ir/irdefs.c
@@ -299,7 +299,7 @@
switch (s->tag) {
case Ist_Put:
vex_printf( "PUT(%d) = ", s->Ist.Put.offset);
- ppIRExpr(s->Ist.Put.expr);
+ ppIRExpr(s->Ist.Put.data);
break;
case Ist_PutI:
vex_printf( "PUTI" );
@@ -312,7 +312,7 @@
case Ist_Tmp:
ppIRTemp(s->Ist.Tmp.tmp);
vex_printf( " = " );
- ppIRExpr(s->Ist.Tmp.expr);
+ ppIRExpr(s->Ist.Tmp.data);
break;
case Ist_STle:
vex_printf( "STle(");
@@ -551,11 +551,11 @@
/* Constructors -- IRStmt */
-IRStmt* IRStmt_Put ( Int off, IRExpr* value ) {
+IRStmt* IRStmt_Put ( Int off, IRExpr* data ) {
IRStmt* s = LibVEX_Alloc(sizeof(IRStmt));
s->tag = Ist_Put;
s->Ist.Put.offset = off;
- s->Ist.Put.expr = value;
+ s->Ist.Put.data = data;
return s;
}
IRStmt* IRStmt_PutI ( IRArray* descr, IRExpr* off,
@@ -568,18 +568,18 @@
s->Ist.PutI.data = data;
return s;
}
-IRStmt* IRStmt_Tmp ( IRTemp tmp, IRExpr* expr ) {
+IRStmt* IRStmt_Tmp ( IRTemp tmp, IRExpr* data ) {
IRStmt* s = LibVEX_Alloc(sizeof(IRStmt));
s->tag = Ist_Tmp;
s->Ist.Tmp.tmp = tmp;
- s->Ist.Tmp.expr = expr;
+ s->Ist.Tmp.data = data;
return s;
}
-IRStmt* IRStmt_STle ( IRExpr* addr, IRExpr* value ) {
+IRStmt* IRStmt_STle ( IRExpr* addr, IRExpr* data ) {
IRStmt* s = LibVEX_Alloc(sizeof(IRStmt));
s->tag = Ist_STle;
s->Ist.STle.addr = addr;
- s->Ist.STle.data = value;
+ s->Ist.STle.data = data;
return s;
}
IRStmt* IRStmt_Dirty ( IRDirty* d )
@@ -999,14 +999,14 @@
IRDirty* d;
switch (stmt->tag) {
case Ist_Put:
- useBeforeDef_Expr(bb,stmt,stmt->Ist.Put.expr,def_counts);
+ useBeforeDef_Expr(bb,stmt,stmt->Ist.Put.data,def_counts);
break;
case Ist_PutI:
useBeforeDef_Expr(bb,stmt,stmt->Ist.PutI.off,def_counts);
useBeforeDef_Expr(bb,stmt,stmt->Ist.PutI.data,def_counts);
break;
case Ist_Tmp:
- useBeforeDef_Expr(bb,stmt,stmt->Ist.Tmp.expr,def_counts);
+ useBeforeDef_Expr(bb,stmt,stmt->Ist.Tmp.data,def_counts);
break;
case Ist_STle:
useBeforeDef_Expr(bb,stmt,stmt->Ist.STle.addr,def_counts);
@@ -1128,24 +1128,27 @@
IRTypeEnv* tyenv = bb->tyenv;
switch (stmt->tag) {
case Ist_Put:
- tcExpr( bb, stmt, stmt->Ist.Put.expr, gWordTy );
- if (typeOfIRExpr(tyenv,stmt->Ist.Put.expr) == Ity_Bit)
- sanityCheckFail(bb,stmt,"IRStmt.Put.expr: cannot Put :: Ity_Bit");
+ tcExpr( bb, stmt, stmt->Ist.Put.data, gWordTy );
+ if (typeOfIRExpr(tyenv,stmt->Ist.Put.data) == Ity_Bit)
+ sanityCheckFail(bb,stmt,"IRStmt.Put.data: cannot Put :: Ity_Bit");
break;
case Ist_PutI:
tcExpr( bb, stmt, stmt->Ist.PutI.data, gWordTy );
tcExpr( bb, stmt, stmt->Ist.PutI.off, gWordTy );
if (typeOfIRExpr(tyenv,stmt->Ist.PutI.data) == Ity_Bit)
- sanityCheckFail(bb,stmt,"IRStmt.PutI.expr: cannot PutI :: Ity_Bit");
+ sanityCheckFail(bb,stmt,"IRStmt.PutI.data: cannot PutI :: Ity_Bit");
+ if (typeOfIRExpr(tyenv,stmt->Ist.PutI.data)
+ != stmt->Ist.PutI.descr->elemTy)
+ sanityCheckFail(bb,stmt,"IRStmt.PutI.data: data ty != elem ty");
if (typeOfIRExpr(tyenv,stmt->Ist.PutI.off) != Ity_I32)
sanityCheckFail(bb,stmt,"IRStmt.PutI.off: not :: Ity_I32");
if (!saneIRArray(stmt->Ist.PutI.descr))
sanityCheckFail(bb,stmt,"IRStmt.PutI.descr: invalid descr");
break;
case Ist_Tmp:
- tcExpr( bb, stmt, stmt->Ist.Tmp.expr, gWordTy );
+ tcExpr( bb, stmt, stmt->Ist.Tmp.data, gWordTy );
if (typeOfIRTemp(tyenv, stmt->Ist.Tmp.tmp)
- != typeOfIRExpr(tyenv, stmt->Ist.Tmp.expr))
+ != typeOfIRExpr(tyenv, stmt->Ist.Tmp.data))
sanityCheckFail(bb,stmt,"IRStmt.Put.Tmp: tmp and expr do not match");
break;
case Ist_STle: