diff --git a/mlir/lib/Pass/PassManagerOptions.cpp b/mlir/lib/Pass/PassManagerOptions.cpp index dd119a75f4069..305bf72bb4799 100644 --- a/mlir/lib/Pass/PassManagerOptions.cpp +++ b/mlir/lib/Pass/PassManagerOptions.cpp @@ -146,6 +146,14 @@ LogicalResult mlir::applyPassManagerCLOptions(PassManager &pm) { if (!options.isConstructed()) return failure(); + if (options->reproducerFile.getNumOccurrences() && options->localReproducer && + pm.getContext()->isMultithreadingEnabled()) { + emitError(UnknownLoc::get(pm.getContext())) + << "Local crash reproduction may not be used without disabling " + "mutli-threading first."; + return failure(); + } + // Generate a reproducer on crash/failure. if (options->reproducerFile.getNumOccurrences()) pm.enableCrashReproducerGeneration(options->reproducerFile, diff --git a/mlir/test/mlir-opt/local-reproducer-with-threading.mlir b/mlir/test/mlir-opt/local-reproducer-with-threading.mlir new file mode 100644 index 0000000000000..8e94f4edb91bf --- /dev/null +++ b/mlir/test/mlir-opt/local-reproducer-with-threading.mlir @@ -0,0 +1,7 @@ +// Test that attempting to create a local crash reproducer without disabling threading +// prints an error from the pass manager (as opposed to crashing with a stack trace). + +// RUN: mlir-opt --verify-diagnostics --mlir-pass-pipeline-local-reproducer \ +// RUN: --mlir-pass-pipeline-crash-reproducer=%t %s + +// expected-error@unknown {{Local crash reproduction may not be used without disabling mutli-threading first.}}