diff options
Diffstat (limited to 'backend/tools/MIRTool')
| -rw-r--r-- | backend/tools/MIRTool/MIRToolMain.cpp | 9 | ||||
| -rw-r--r-- | backend/tools/MIRTool/MIRToolOperationsTest.cmake | 17 |
2 files changed, 23 insertions, 3 deletions
diff --git a/backend/tools/MIRTool/MIRToolMain.cpp b/backend/tools/MIRTool/MIRToolMain.cpp index eeeaac5..f764cf0 100644 --- a/backend/tools/MIRTool/MIRToolMain.cpp +++ b/backend/tools/MIRTool/MIRToolMain.cpp @@ -592,7 +592,7 @@ template <typename IntegerT> continue; } - if (!Argument.starts_with('-')) { + if (Argument == "-" || !Argument.starts_with('-')) { if (!Command.InputPath.empty()) return rcc::makeUnexpected(ErrorCode::InvalidInvocation, "input path is specified twice"); Command.InputPath = std::string(Argument); @@ -780,7 +780,8 @@ runWithCache(const CommandLine &Command, CanonicalMIR Input, const rcc::TargetDe auto Source = readInput(Command.InputPath); if (!Source) return std::unexpected(Source.error()); - auto Input = rcc::tooling::parseAndCanonicalizeMIR(Command.InputPath, std::move(*Source), *Target, + const std::string SourceName = Command.InputPath == "-" ? "<stdin>" : Command.InputPath; + auto Input = rcc::tooling::parseAndCanonicalizeMIR(SourceName, std::move(*Source), *Target, Command.Invocation); if (!Input) return std::unexpected(Input.error()); @@ -981,6 +982,10 @@ int main(int ArgumentCount, char *Arguments[]) { } auto Result = runCommand(*Command); if (!Result) { + if (Result.error().code() == ErrorCode::ParseError) { + std::cerr << Result.error().message() << '\n'; + return 1; + } std::cerr << "rcc-backend-mir: " << rcc::getErrorCodeName(Result.error().code()) << ": " << Result.error().message() << '\n'; return 1; diff --git a/backend/tools/MIRTool/MIRToolOperationsTest.cmake b/backend/tools/MIRTool/MIRToolOperationsTest.cmake index 097e571..003e868 100644 --- a/backend/tools/MIRTool/MIRToolOperationsTest.cmake +++ b/backend/tools/MIRTool/MIRToolOperationsTest.cmake @@ -7,6 +7,21 @@ endif() file(REMOVE_RECURSE "${WORK_DIRECTORY}") file(MAKE_DIRECTORY "${WORK_DIRECTORY}") +set(StandardInputMIR "${WORK_DIRECTORY}/stdin.mir") +execute_process( + COMMAND "${TOOL}" --verify - --output "${StandardInputMIR}" + INPUT_FILE "${INPUT}" + RESULT_VARIABLE StandardInputResult + ERROR_VARIABLE StandardInputDiagnostics +) +if(NOT StandardInputResult EQUAL 0) + message(FATAL_ERROR "standard-input MIR parsing failed: ${StandardInputDiagnostics}") +endif() +file(SIZE "${StandardInputMIR}" StandardInputSize) +if(StandardInputSize EQUAL 0) + message(FATAL_ERROR "standard-input MIR parsing produced no canonical output") +endif() + set(CacheDirectory "${WORK_DIRECTORY}/cache") set(CachedAssembly "${WORK_DIRECTORY}/cached.s") set(ReloadedAssembly "${WORK_DIRECTORY}/reloaded.s") @@ -148,7 +163,7 @@ endif() file(READ "${INPUT}" ReducerSeedText) string(REPLACE " $x10 = COPY %2\n" - " %3:gpr(i64) = G_CONSTANT 99\n $x10 = COPY %2\n" + " %3:gprb(i64) = G_CONSTANT 99\n $x10 = COPY %2\n" ReducerSeedText "${ReducerSeedText}" ) |
