aboutsummaryrefslogtreecommitdiff
path: root/backend/tools/MIRTool
diff options
context:
space:
mode:
Diffstat (limited to 'backend/tools/MIRTool')
-rw-r--r--backend/tools/MIRTool/MIRToolMain.cpp9
-rw-r--r--backend/tools/MIRTool/MIRToolOperationsTest.cmake17
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}"
)