@@ -731,22 +731,14 @@ namespace nil {
731
731
size_t num_cells = layout_resolver->get_cells_num <BlueprintFieldType>(dest->getType ());
732
732
if (num_cells == 1 ) {
733
733
auto &cell = memory[ptr];
734
- if (!cell.v .has_value ()) {
735
- log .debug (boost::format (" Load uninitialized var %1% = 0" ) % ptr);
736
- cell.v = zero_var;
737
- }
738
- var v = cell.v .value ();
739
- frame.scalars [dest] = v;
734
+ ASSERT_MSG (detail::is_initialized (cell.v ), " Load uninitialized var" );
735
+ frame.scalars [dest] = cell.v ;
740
736
} else {
741
737
std::vector<var> res;
742
738
for (size_t i = 0 ; i < num_cells; ++i) {
743
739
auto &cell = memory[ptr + i];
744
- if (!cell.v .has_value ()) {
745
- log .debug (boost::format (" Load uninitialized var %1% = 0" ) % (ptr + i));
746
- cell.v = zero_var;
747
- }
748
- var v = cell.v .value ();
749
- res.push_back (v);
740
+ ASSERT_MSG (detail::is_initialized (cell.v ), " Load uninitialized var" );
741
+ res.push_back (cell.v );
750
742
}
751
743
frame.vectors [dest] = res;
752
744
}
@@ -981,30 +973,30 @@ namespace nil {
981
973
if (i < false_memory_region_end && i < true_memory_region_end) {
982
974
auto v_true = is_stack ? state.stack [i - memory_region_begin].v : state.heap [i - memory_region_begin].v ;
983
975
auto v_false = memory[i].v ;
984
- if (v_true. has_value ( ) && v_false. has_value ( )) {
985
- if (!detail::is_internal<var>(v_true. value ()) && !detail::is_internal<var>(v_false. value () )) {
976
+ if (detail::is_initialized (v_true ) && detail::is_initialized (v_false )) {
977
+ if (!detail::is_internal<var>(v_true) && !detail::is_internal<var>(v_false)) {
986
978
// cell exist and contains real var in both state and current memory, so merged result = select(cond, state var, current memory var)
987
979
memory.store (i, create_select_component<BlueprintFieldType, var>(
988
- cond, v_true. value () , v_false. value () , circuits[currProverIdx], assignments[currProverIdx], internal_storage, statistics, param, one_var));
980
+ cond, v_true, v_false, circuits[currProverIdx], assignments[currProverIdx], internal_storage, statistics, param, one_var));
989
981
} else {
990
982
typename BlueprintFieldType::value_type res_value = 0 ;
991
983
if (gen_mode.has_assignments ()) {
992
- res_value = (get_var_value (cond) != res_value) ? get_var_value (v_true. value ()) : get_var_value (v_false. value () );
984
+ res_value = (get_var_value (cond) != res_value) ? get_var_value (v_true) : get_var_value (v_false);
993
985
}
994
986
// cell exist in both state and current memory, but contains internal var, so merged result = internal var
995
987
var internal_select_res = put_value_into_internal_storage (res_value);
996
988
memory.store (i, internal_select_res);
997
989
}
998
- } else if (v_true. has_value ( )) {
990
+ } else if (detail::is_initialized (v_true )) {
999
991
// cell exist in both state and current memory, but only state_var has value, so merged result = state_var
1000
- memory.store (i, v_true. value () );
992
+ memory.store (i, v_true);
1001
993
}
1002
994
// otherwise merge result = current_memory var
1003
995
} else if (i < true_memory_region_end) {
1004
996
auto v_true = is_stack ? state.stack [i - memory_region_begin].v : state.heap [i - memory_region_begin].v ;
1005
- if (v_true. has_value ( )) {
997
+ if (detail::is_initialized (v_true )) {
1006
998
// cell exist only in state, so merged result = state_var
1007
- memory.store (i, v_true. value () );
999
+ memory.store (i, v_true);
1008
1000
}
1009
1001
}
1010
1002
// otherwise merge result = current_memory var
@@ -1564,12 +1556,14 @@ namespace nil {
1564
1556
extract_inst->getAggregateOperand ()->getType (), extract_inst->getIndices ())
1565
1557
.second ;
1566
1558
var v = memory.load (ptr);
1559
+ ASSERT (detail::is_initialized (v));
1567
1560
frame.scalars [inst] = v;
1568
1561
return inst->getNextNonDebugInstruction ();
1569
1562
}
1570
1563
case llvm::Instruction::IndirectBr: {
1571
1564
ptr_type ptr = resolve_number<ptr_type>(frame, inst->getOperand (0 ));
1572
1565
var bb_var = memory.load (ptr);
1566
+ ASSERT (detail::is_initialized (bb_var));
1573
1567
llvm::BasicBlock *bb = (llvm::BasicBlock *)(resolve_number<uintptr_t >(bb_var));
1574
1568
ASSERT (labels.find (bb) != labels.end ());
1575
1569
return &bb->front ();
0 commit comments