================ @@ -5934,6 +5938,40 @@ IntrinsicLibrary::genSum(mlir::Type resultType, resultType, args); } +// SYSTEM +void IntrinsicLibrary::genSystem(llvm::ArrayRef<fir::ExtendedValue> args) { + assert(args.size() == 2); + mlir::Value command = fir::getBase(args[0]); + const fir::ExtendedValue &exitstat = args[1]; + + if (!command) + fir::emitFatalError(loc, "expected COMMAND parameter"); + + mlir::Type boxNoneTy = fir::BoxType::get(builder.getNoneType()); + + mlir::Value waitBool = builder.createBool(loc, true); + mlir::Value exitstatBox = + isStaticallyPresent(exitstat) + ? fir::getBase(exitstat) + : builder.create<fir::AbsentOp>(loc, boxNoneTy).getResult(); + + // Create a dummmy cmdstat to prevent EXECUTE_COMMAND_LINE terminate itself + // when cmdstat is assigned with a non-zero value but not present + mlir::Value tempValue = + builder.createIntegerConstant(loc, builder.getI2Type(), 0); + mlir::Value temp = builder.createTemporary(loc, builder.getI2Type()); + mlir::Value castVal = + builder.createConvert(loc, builder.getI2Type(), tempValue); ---------------- tblah wrote:
Why is this needed, isn't it already `i2`? https://github.com/llvm/llvm-project/pull/74309 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits