|
7 | 7 | \*******************************************************************/
|
8 | 8 |
|
9 | 9 | #include <iostream>
|
| 10 | +#include <sstream> |
10 | 11 | #include <cassert>
|
11 | 12 |
|
12 | 13 | #include <util/expr_util.h>
|
@@ -121,23 +122,30 @@ void goto_symext::parameter_assignments(
|
121 | 122 | f_parameter_type.id()==ID_unsignedbv ||
|
122 | 123 | f_parameter_type.id()==ID_c_enum_tag ||
|
123 | 124 | f_parameter_type.id()==ID_bool ||
|
124 |
| - f_parameter_type.id()==ID_pointer) && |
| 125 | + f_parameter_type.id()==ID_pointer || |
| 126 | + f_parameter_type.id()==ID_union) && |
125 | 127 | (f_rhs_type.id()==ID_signedbv ||
|
126 | 128 | f_rhs_type.id()==ID_unsignedbv ||
|
127 | 129 | f_rhs_type.id()==ID_c_bit_field ||
|
128 | 130 | f_rhs_type.id()==ID_c_enum_tag ||
|
129 | 131 | f_rhs_type.id()==ID_bool ||
|
130 |
| - f_rhs_type.id()==ID_pointer)) |
| 132 | + f_rhs_type.id()==ID_pointer || |
| 133 | + f_rhs_type.id()==ID_union)) |
131 | 134 | {
|
132 |
| - rhs.make_typecast(parameter_type); |
| 135 | + rhs= |
| 136 | + byte_extract_exprt( |
| 137 | + byte_extract_id(), |
| 138 | + rhs, |
| 139 | + gen_zero(index_type()), |
| 140 | + parameter_type); |
133 | 141 | }
|
134 | 142 | else
|
135 | 143 | {
|
136 |
| - std::string error="function call: parameter \""+ |
137 |
| - id2string(identifier)+"\" type mismatch: got "+ |
138 |
| - rhs.type().to_string()+", expected "+ |
139 |
| - parameter_type.to_string(); |
140 |
| - throw error; |
| 144 | + std::ostringstream error; |
| 145 | + error << "function call: parameter \"" << identifier |
| 146 | + << "\" type mismatch: got " << rhs.type().pretty() |
| 147 | + << ", expected " << parameter_type.pretty(); |
| 148 | + throw error.str(); |
141 | 149 | }
|
142 | 150 | }
|
143 | 151 |
|
|
0 commit comments