@@ -156,7 +156,8 @@ object (self)
156156 let varinvs = floc#varinv#get_var_reaching_defs symvar in
157157 (match varinvs with
158158 | [vinv] -> vinv#get_reaching_defs
159- | _ -> [] ) in
159+ | _ ->
160+ List. concat (List. map (fun vinv -> vinv#get_reaching_defs) varinvs)) in
160161
161162 let get_variable_rdefs_r (v_r : variable_t traceresult ): symbol_t list =
162163 TR. tfold_default get_variable_rdefs [] v_r in
@@ -347,10 +348,13 @@ object (self)
347348 let tt_z = mk_vty_term tv_z in
348349 let fterm = mk_vty_term fvar in
349350 let rule = mnem ^ " -exituse" in
350- begin
351- log_subtype_constraint __LINE__ rule tt_z fterm;
352- store#add_subtype_constraint faddr iaddr rule tt_z fterm
353- end )
351+ if fndata#is_typing_rule_enabled iaddr rule then
352+ begin
353+ log_subtype_constraint __LINE__ rule tt_z fterm;
354+ store#add_subtype_constraint faddr iaddr rule tt_z fterm
355+ end
356+ else
357+ log_subtype_rule_disabled __LINE__ rule tt_z fterm)
354358 else
355359 () in
356360
@@ -620,7 +624,7 @@ object (self)
620624 end )
621625 | _ ->
622626 let opttc = mk_btype_constraint typevar rtype in
623- let rule = " BL-rv" in
627+ let rule = " BL-sig- rv" in
624628 match opttc with
625629 | Some tc ->
626630 if fndata#is_typing_rule_enabled iaddr rule then
@@ -642,6 +646,7 @@ object (self)
642646 begin
643647 (if is_register_parameter p then
644648 let regarg = TR. tget_ok (get_register_parameter_register p) in
649+ let regstr = BCHCPURegisters. register_to_string regarg in
645650 let pvar = floc#f#env#mk_register_variable regarg in
646651 let rdefs = get_variable_rdefs pvar in
647652 if not (is_unknown_type ptype) then
@@ -652,7 +657,8 @@ object (self)
652657 let rule = " BL-sig-regarg" in
653658 match opttc with
654659 | Some tc ->
655- if fndata#is_typing_rule_enabled iaddr rule then
660+ if fndata#is_typing_rule_enabled
661+ ~rdef: (Some regstr) iaddr rule then
656662 begin
657663 log_type_constraint __LINE__ rule tc;
658664 store#add_constraint faddr iaddr rule tc
@@ -1437,36 +1443,61 @@ object (self)
14371443 let lhstypevar =
14381444 mk_localstack_lhs_typevar offset faddr iaddr in
14391445 let opttc = mk_btype_constraint lhstypevar t in
1446+ let rule = " STR-svintro" in
14401447 (match opttc with
14411448 | Some tc ->
1442- let rule = " STR-svintro" in
14431449 begin
14441450 log_type_constraint __LINE__ rule tc;
14451451 store#add_constraint faddr iaddr rule tc
14461452 end
1447- | _ -> () ))
1453+ | _ ->
1454+ log_no_type_constraint __LINE__ rule t))
14481455 end );
14491456
1450- (let rule = " STR-store" in
1451- List. iter (fun rndsym ->
1452- let straddr = rndsym#getBaseName in
1453- let rntypevar = mk_reglhs_typevar rnreg faddr straddr in
1454- let rntypevar = add_store_capability ~size: 4 ~offset rntypevar in
1455- List. iter (fun rtdsym ->
1456- let rtdloc = rtdsym#getBaseName in
1457- let rttypevar = mk_reglhs_typevar rtreg faddr rtdloc in
1458- let rttypeterm = mk_vty_term rttypevar in
1459- let rntypeterm = mk_vty_term rntypevar in
1460- if fndata#is_typing_rule_enabled
1461- ~rdef: (Some rtdloc) iaddr rule then
1462- begin
1463- log_subtype_constraint __LINE__ rule rttypeterm rntypeterm;
1464- store#add_subtype_constraint
1465- faddr iaddr rule rttypeterm rntypeterm
1466- end
1467- else
1468- log_subtype_rule_disabled __LINE__ rule rttypeterm rntypeterm
1469- ) rtrdefs) rnrdefs)
1457+ (let rule = " STR-store" in
1458+ List. iter (fun rndsym ->
1459+ let straddr = rndsym#getBaseName in
1460+ let rntypevar = mk_reglhs_typevar rnreg faddr straddr in
1461+ let rntypevar = add_store_capability ~size: 4 ~offset rntypevar in
1462+ List. iter (fun rtdsym ->
1463+ let rtdloc = rtdsym#getBaseName in
1464+ let rttypevar = mk_reglhs_typevar rtreg faddr rtdloc in
1465+ let rttypeterm = mk_vty_term rttypevar in
1466+ let rntypeterm = mk_vty_term rntypevar in
1467+ if fndata#is_typing_rule_enabled
1468+ ~rdef: (Some rtdloc) iaddr rule then
1469+ begin
1470+ log_subtype_constraint __LINE__ rule rttypeterm rntypeterm;
1471+ store#add_subtype_constraint
1472+ faddr iaddr rule rttypeterm rntypeterm
1473+ end
1474+ else
1475+ log_subtype_rule_disabled __LINE__ rule rttypeterm rntypeterm
1476+ ) rtrdefs) rnrdefs);
1477+
1478+ (* type of destination memory location may be known *)
1479+ (let vmem_r = memvarop#to_variable floc in
1480+ let vtype_r = TR. tbind floc#get_variable_type vmem_r in
1481+ let rule = " STR-memop-tc" in
1482+ TR. titer
1483+ ~ok: (fun t ->
1484+ List. iter (fun rtdsym ->
1485+ let rtdloc = rtdsym#getBaseName in
1486+ let rttypevar = mk_reglhs_typevar rtreg faddr rtdloc in
1487+ let opttc = mk_btype_constraint rttypevar t in
1488+ match opttc with
1489+ | Some tc ->
1490+ if fndata#is_typing_rule_enabled iaddr rule then
1491+ begin
1492+ log_type_constraint __LINE__ rule tc;
1493+ store#add_constraint faddr iaddr rule tc
1494+ end
1495+ else
1496+ log_type_constraint_rule_disabled __LINE__ rule tc
1497+ | _ -> () ) rtrdefs)
1498+ ~error: (fun e -> log_error_result __FILE__ __LINE__ e)
1499+ vtype_r)
1500+
14701501 end
14711502
14721503 | StoreRegisterByte (_ , rt , rn , rm , _memvarop , _ ) when rm#is_immediate ->
0 commit comments