@@ -237,6 +237,11 @@ def ast_prov(
237237
238238 # high-level assignment
239239
240+ def has_cast () -> bool :
241+ return (
242+ astree .has_register_variable_intro (iaddr )
243+ and astree .get_register_variable_intro (iaddr ).has_cast ())
244+
240245 xd = ARMAddXData (xdata )
241246 if not xdata .is_ok :
242247 chklogger .logger .error ("Error value encountered at %s" , iaddr )
@@ -252,16 +257,10 @@ def ast_prov(
252257 defuses = xdata .defuses
253258 defuseshigh = xdata .defuseshigh
254259
255- if rhs3 .is_string_reference :
256- ctype = astree .astree .mk_pointer_type (astree .astree .char_type )
257- hl_lhs = XU .xvariable_to_ast_lvals (
258- lhs ,
259- xdata ,
260- astree ,
261- ispointer = True ,
262- ctype = ctype )[0 ]
263- else :
264- hl_lhs = XU .xvariable_to_ast_lval (lhs , xdata , iaddr , astree )
260+ hl_lhs = XU .xvariable_to_ast_lval (lhs , xdata , iaddr , astree )
261+
262+ def hl_rhs_default () -> AST .ASTExpr :
263+ return XU .xxpr_to_ast_def_expr (rhs3 , xdata , iaddr , astree )
265264
266265 if str (lhs ) == "PC" :
267266 chklogger .logger .info (
@@ -276,11 +275,11 @@ def pointer_arithmetic_expr() -> AST.ASTExpr:
276275 hl_rhs2_type = hl_rhs2 .ctype (astree .ctyper )
277276
278277 if hl_rhs1_type is None and hl_rhs2_type is None :
279- chklogger .logger .error (
278+ chklogger .logger .info (
280279 "Unable to lift pointer arithmetic without type for "
281280 + "%s at address %s" ,
282281 str (rhs3 ), iaddr )
283- return astree . mk_temp_lval_expression ()
282+ return hl_rhs_default ()
284283
285284 if hl_rhs2_type is not None and hl_rhs2_type .is_pointer :
286285 rhs2tgttyp = cast (AST .ASTTypPtr , hl_rhs2_type ).tgttyp
@@ -290,7 +289,6 @@ def pointer_arithmetic_expr() -> AST.ASTExpr:
290289 "Unable to lift pointer arithmetic without size for "
291290 + "%s at address %s; set type size to 1" ,
292291 str (hl_rhs2_type ), iaddr )
293- # return astree.mk_temp_lval_expression()
294292 tgttypsize = 1
295293
296294 if tgttypsize == 1 :
@@ -311,11 +309,11 @@ def pointer_arithmetic_expr() -> AST.ASTExpr:
311309 rhs1tgttyp = cast (AST .ASTTypPtr , hl_rhs1_type ).tgttyp
312310 tgttypsize = astree .type_size_in_bytes (rhs1tgttyp )
313311 if tgttypsize is None :
314- chklogger .logger .error (
312+ chklogger .logger .info (
315313 "Unable to lift pointer arithmetic without size for "
316314 + "%s at address %s" ,
317315 str (hl_rhs1_type ), iaddr )
318- return astree . mk_temp_lval_expression ()
316+ return hl_rhs_default ()
319317
320318 if hl_rhs1 .is_ast_startof :
321319 arraylval = cast (AST .ASTStartOf , hl_rhs1 ).lval
@@ -345,13 +343,13 @@ def pointer_arithmetic_expr() -> AST.ASTExpr:
345343 return astree .mk_binary_op ("plus" , hl_rhs1 , scaled )
346344
347345 if hl_rhs2_type is None :
348- chklogger .logger .error (
346+ chklogger .logger .info (
349347 "Unable to lift pointer arithmetic without type for "
350348 + "%s at address %s" ,
351349 str (rhs2 ), iaddr )
352- return astree . mk_temp_lval_expression ()
350+ return hl_rhs_default ()
353351
354- chklogger .logger .error (
352+ chklogger .logger .info (
355353 "Second operand pointer variable not yet supported for %s at "
356354 + "address %s; rrhs1: %s; hl_rhs1: %s; hl_rhs2: %s; hl_rhs1_type: %s;"
357355 + " hl_rhs2_type: %s" ,
@@ -362,8 +360,7 @@ def pointer_arithmetic_expr() -> AST.ASTExpr:
362360 str (hl_rhs2 ),
363361 str (hl_rhs1_type ),
364362 str (hl_rhs2_type ))
365- return astree .mk_temp_lval_expression ()
366-
363+ return hl_rhs_default ()
367364
368365 # resulting expression is a stack address
369366 if (
@@ -408,7 +405,7 @@ def pointer_arithmetic_expr() -> AST.ASTExpr:
408405 if rhs3 .is_constant_expression :
409406 astree .set_ssa_value (str (hl_lhs ), hl_rhs )
410407 else :
411- hl_rhs = XU . xxpr_to_ast_def_expr ( rhs3 , xdata , iaddr , astree )
408+ hl_rhs = hl_rhs_default ( )
412409
413410 hl_assign = astree .mk_assign (
414411 hl_lhs ,
0 commit comments