36 const auto& cfg_blocks = block_result.cfg_blocks;
39 const auto& var_init_in = var_init_result.var_init_in;
41 const auto& static_alloc_result =
43 const auto& static_alloc_in = static_alloc_result.static_alloc_in;
45 for (
size_t i = 0; i < cfg_blocks.size(); ++i) {
46 std::set<std::string> defined_in_block = var_init_in[i];
47 std::set<std::string> static_in_block = static_alloc_in[i];
49 for (
int j = cfg_blocks[i].start_token_idx;
50 j < cfg_blocks[i].end_token_idx; ++j) {
51 const auto& token = tokens[j];
54 const auto& payload = std::get<TokenPayloadVar>(token.payload);
55 if (!defined_in_block.contains(payload.name)) {
57 std::format(
"Variable is uninitialized: {}",
62 defined_in_block.insert(
63 std::get<TokenPayloadVar>(token.payload).name);
67 std::get<TokenPayloadArrayOp>(token.payload);
69 if (!defined_in_block.contains(array_name)) {
71 std::format(
"Array is uninitialized: {}", payload.name),
77 std::get<TokenPayloadArrayOp>(token.payload);
80 if (static_in_block.contains(array_name)) {
82 std::format(
"Statically allocated array cannot be "
89 static_in_block.insert(array_name);
91 defined_in_block.insert(array_name);