Skip to content

Commit 1f9d908

Browse files
authored
Merge pull request #3652 from tautschnig/2064-simplifier-preserve-types
Make the simplifier preserve syntactically equal types [blocks: #2064]
2 parents 65cfed1 + 450e568 commit 1f9d908

File tree

2 files changed

+10
-1
lines changed

2 files changed

+10
-1
lines changed

src/util/simplify_expr_int.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -955,7 +955,9 @@ bool simplify_exprt::simplify_concatenation(exprt &expr)
955955
}
956956

957957
// { x } = x
958-
if(expr.operands().size()==1)
958+
if(
959+
expr.operands().size() == 1 &&
960+
base_type_eq(expr.op0().type(), expr.type(), ns))
959961
{
960962
exprt tmp;
961963
tmp.swap(expr.op0());

src/util/simplify_expr_struct.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ Author: Daniel Kroening, [email protected]
1111
#include "arith_tools.h"
1212
#include "base_type.h"
1313
#include "byte_operators.h"
14+
#include "invariant.h"
1415
#include "namespace.h"
1516
#include "pointer_offset_size.h"
1617
#include "std_expr.h"
@@ -45,6 +46,9 @@ bool simplify_exprt::simplify_member(exprt &expr)
4546
if(op1.get(ID_component_name)==component_name)
4647
{
4748
// found it!
49+
DATA_INVARIANT(
50+
base_type_eq(op2.type(), expr.type(), ns),
51+
"member expression type must match component type");
4852
exprt tmp;
4953
tmp.swap(op2);
5054
expr.swap(tmp);
@@ -134,6 +138,9 @@ bool simplify_exprt::simplify_member(exprt &expr)
134138
if(struct_type.has_component(component_name))
135139
{
136140
std::size_t number=struct_type.component_number(component_name);
141+
DATA_INVARIANT(
142+
base_type_eq(op.operands()[number].type(), expr.type(), ns),
143+
"member expression type must match component type");
137144
exprt tmp;
138145
tmp.swap(op.operands()[number]);
139146
expr.swap(tmp);

0 commit comments

Comments
 (0)