diff --git a/src/main.cpp b/src/main.cpp index 2f0959c..32ef127 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -88,7 +88,7 @@ int main(int argc, const char **argv) { ANTLRInputStream input(ifs_source_file); SysyLexer lexer(&input); CommonTokenStream tokens(&lexer); - + ifs_source_file.close(); // tokens.fill(); // for (auto token : tokens.getTokens()) { // std::cout << token->toString() << std::endl; @@ -96,10 +96,12 @@ int main(int argc, const char **argv) { SysyParser parser(&tokens); parser.removeErrorListeners(); - parser.addErrorListener(new AbortErrorListener()); + auto _abort_listener = new AbortErrorListener(); + parser.addErrorListener(_abort_listener); auto tree = parser.program(); Visitor visitor(lexer); visitor.visitProgram(tree); + delete _abort_listener; std::vector> passes = { std::make_shared(), @@ -127,6 +129,7 @@ int main(int argc, const char **argv) { return 1; } visitor.llir_gen(ofs_llir_file); + ofs_llir_file.close(); } // std::cout << tree->toStringTree(&parser) << std::endl << std::endl; @@ -141,6 +144,7 @@ int main(int argc, const char **argv) { mc_module.debug1 = true; mc_module.MC2ASM(ofs_virt_asm_file); mc_module.debug1 = false; + ofs_virt_asm_file.close(); std::vector mc_passes = {std::make_shared()}; for (auto pass : mc_passes) { @@ -152,6 +156,7 @@ int main(int argc, const char **argv) { return 1; } mc_module.MC2ASM(ofs_asm_file); + ofs_asm_file.close(); } return 0; } \ No newline at end of file diff --git a/src/pass_mem2reg.cpp b/src/pass_mem2reg.cpp index 461ee9a..914bc8d 100644 --- a/src/pass_mem2reg.cpp +++ b/src/pass_mem2reg.cpp @@ -82,7 +82,7 @@ static void live_in_blocks( } else if (Value::is(itr)) { // a load before store, it live in this block - if (Value::as(itr)->operand_list[1] == ai) break; + if (Value::as(itr)->operand_list[0] == ai) break; } } }