<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/95527>95527</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Segfault in ~OwningOpRef, op->erase()
</td>
</tr>
<tr>
<th>Labels</th>
<td>
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
pramit-j2-sl
</td>
</tr>
</table>
<pre>
```
#include "mlir/IR/OwningOpRef.h"
#include "mlir/Parser/Parser.h"
#include "mlir/Pass/PassManager.h"
#include "mlir/IR/BuiltinOps.h"
#include "mlir/Support/FileUtilities.h"
#include "mlir/Tools/mlir-opt/MlirOptMain.h"
#include "mlir/Transforms/Passes.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/Support/SourceMgr.h"
#include "llvm/Support/ToolOutputFile.h"
int main(int argc, char **argv)
{
mlir::DialectRegistry registry;
// Register and parse command line options.
std::string inputFilename, outputFilename;
std::tie(inputFilename, outputFilename) =
registerAndParseCLIOptions(argc, argv, "Read mlir file and display\n", registry);
std::string errorMessage;
auto output = mlir::openOutputFile(outputFilename, &errorMessage);
if (!output)
{
llvm::errs() << errorMessage << "\n";
exit(1);
}
llvm::SourceMgr sourceMgr;
mlir::OwningOpRef<mlir::ModuleOp> module;
mlir::MLIRContext context(registry, mlir::MLIRContext::Threading::DISABLED);
mlir::SourceMgrDiagnosticHandler sourceMgrHandler(sourceMgr, &context);
context.allowUnregisteredDialects(true);
llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>> fileOrErr =
llvm::MemoryBuffer::getFileOrSTDIN(inputFilename);
if (std::error_code ec = fileOrErr.getError())
{
llvm::errs() << "Could not open input file: " << ec.message() << "\n";
return -1;
}
// Parse the input mlir.
sourceMgr.AddNewSourceBuffer(std::move(*fileOrErr), llvm::SMLoc());
module = mlir::parseSourceFile<mlir::ModuleOp>(sourceMgr, &context);
if (!module)
{
llvm::errs() << "Error can't load file " << inputFilename << "\n";
return 3;
}
module->dump();
return 0;
}
```
```
// RUN: my-opt -mlir-print-debuginfo -allow-unregistered-dialect %s | FileCheck %s
module {
// CHECK: "hello.world"
"hello.world"() : () -> ()
}
```
Segfault location:
```
~OwningOpRef() {
if (op)
op->erase(); // -->here, when dtor called at the end of main()
```
Help to fix.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJycV0tz4yoT_TV4Q9llIT8XXtiyU5P64vFXycx6CouWzFwEuoCSyeb-9lsg9PAjieumUjZBHLr79OlWhxrDcwmwQtMNmm4HtLInpVelpgW3w99kaMTgqNj7Cs3G4Xe8ReM1IjGXqagYYERIIbhG5OHxGZGHw5vkMj-Uz5CNToiQT87_n2oD3eLr48aErz2VNP8a4R3aVFxYLg-l-er4S1WWSltEHh64gJ-WC245fAn7oZRwjrk_h6p0-L3g-lDaPeXyS7Sm0mRKF01snxgU4rU48zNRRUEle-IS7gdp-vZLGauBFveDXlSlU9jnH3N-BXG8HCpbVtbR2cf5Ty4tLiiXiCzckuo8RSTB6YlqjMgakTXV-SsiywCab-oFxp65eI3i9ZZTAal9hpwbq9-xDgsUb_qmMEbkAZEHXB8EjalkuHSqw2lNIRZcAlal5UqaUQMzltWGjNVc5pjLEI2kBThvVRuf34k3V0jLwUf4OZAsMYq3AayDl2vJfGUkT4-H2jFEFg1PNTmJY_4ZKPOk4IwL8LExbkpB39E0kY52knTUkOUVO5dhgtZK78EYmvdjopVVwXHnbS8PqgTZpRqRxWV4zs_Z2bU9NzDmGUZkgUhU49qk417WMfYK8_ZAa-MBjrYExcmZy82eizwQEPeugT_cIrKIzlxA8-05J52xVvrYNKvefR0Jvc6H4qTb3ytWCTiUKN7hwq9vwvdPj8-Jkhb-WJzW34gsurQlt8_WGz9OGijjMg918fiy3jzttmchdvA2oi2nuVTG8vQblUxAL8Swgciii7pOY-vctZDCoxEVQr39lI2QgYVCdUmzuoIb2I7vnUvlQaM4aXVZSf53Bb9K63a7k3solH7fVFkGGsU7R7CrgIPead2rp48AbicHr9KDfvmxffx-XanXKm2d8pL7lSoGGFJfEK3xUQ7Wh1GLtNPz_YJGhCSqEgxLZbGrr7r5eBsoXrvnrfbTUdFU1cUVt_SvwVZa4mHU272Uf-iXvv1ge4Jg3EmoaY6tLEZrxr7DWy2qwG2PpkK91n6tW3o8JUm_xPZPKu246iTry-Wi2fi-XVvz3eaDWrtPub3eE2rzv-XKZxunVCIyt1goyupm3EvTmbLuy1H8SYpqd4co3rGqKAN53fFww7irsxZ_Mcr1Py-nvPqt-fO7U1zx7qYbPPRzTqm5tEMGxyrnMlN46Et-WPVqfsjqoseITA1G8wS74JMTpH_5rb7hJtEd48F28m2X_C_o_QRCqNGb0oK1swS-8aDJzRqHpSMprO_h4gXyjFbCpTGl7r3r8n7r-D_9lh-sthHUulJlT1DuR5XOG9DUQJuzJtihe3QC7V-YbyeQmFmvKiGAYWp9JYJkWGXN6NSFdCuSbyBKbBXO-J_RgK1itoyXdACraB4t4lk8mUwHp9V0nE4XkJH5fH6cAIF4PDumSzpZkGm2JNFxwFdkTCbjWTSJomg8mY5m7EjGMJ8tsyiKKDA0GUNBuRi5IhkpnQ-4MRWsltMpmQ8EPYIwzX8YeuUODY9VbtBkLLixpoNZbgWsWv65xOcUJ9f0DSotVidrS-Oy5HnMuT1Vx1Gq3DwaxlJvtNTqN6RuNvX-uYm7dvF1Rf4NAAD___151iE">