If I build with Visual Studio 2022 version 17.3.4, the following crash is seen in a Release build:
C:\git\llvm-project>ninja check-mlir -C stage1_msvc ninja: Entering directory `stage1_msvc' [21/22] Running the MLIR regression tests llvm-lit.py: C:\git\llvm-project\llvm\utils\lit\lit\llvm\config.py:46: note: using lit tools: C:\Users\alex_\scoop\apps\git\current\usr\bin -- Testing: 1487 tests, 16 workers -- Testing: 0.. 10.. 20 FAIL: MLIR :: Dialect/Affine/ops.mlir (181 of 1487) ******************** TEST 'MLIR :: Dialect/Affine/ops.mlir' FAILED ******************** Script: -- : 'RUN: at line 1'; c:\git\llvm-project\stage1_msvc\bin\mlir-opt.exe -allow-unregistered-dialect -split-input-file C:\git\llvm-project\mlir\test\Dialect\Affine\ops.mlir | c:\git\llvm-project\stage1_msvc\bin\filecheck.exe C:\git\llvm-project\mlir\test\Dialect\Affine\ops.mlir : 'RUN: at line 2'; c:\git\llvm-project\stage1_msvc\bin\mlir-opt.exe -allow-unregistered-dialect C:\git\llvm-project\mlir\test\Dialect\Affine\ops.mlir -mlir-print-op-generic | c:\git\llvm-project\stage1_msvc\bin\filecheck.exe -check-prefix=GENERIC C:\git\llvm-project\mlir\test\Dialect\Affine\ops.mlir -- Exit Code: 1 Command Output (stdout): -- $ ":" "RUN: at line 1" $ "c:\git\llvm-project\stage1_msvc\bin\mlir-opt.exe" "-allow-unregistered-dialect" "-split-input-file" "C:\git\llvm-project\mlir\test\Dialect\Affine\ops.mlir" # command stderr: PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace. Stack dump: 0. Program arguments: c:\\git\\llvm-project\\stage1_msvc\\bin\\mlir-opt.exe -allow-unregistered-dialect -split-input-file C:\\git\\llvm-project\\mlir\\test\\Dialect\\Affine\\ops.mlir 1. MLIR Parser: custom op parser 'func.func' 2. MLIR Parser: custom op parser 'affine.parallel' Exception Code: 0xC0000005 #0 0x00007ff7943feece llvm::hashing::detail::hash_short(char const *, unsigned __int64, unsigned __int64) C:\git\llvm-project\llvm\include\llvm\ADT\Hashing.h:252:0 #1 0x00007ff79440402e llvm::hash_code::{ctor} C:\git\llvm-project\llvm\include\llvm\ADT\Hashing.h:82:0 #2 0x00007ff79440402e llvm::hashing::detail::hash_combine_range_impl<char const>(char const *, char const *) C:\git\llvm-project\llvm\include\llvm\ADT\Hashing.h:457:0 #3 0x00007ff794405bf4 llvm::DenseMapInfo<class llvm::StringRef, void>::getHashValue(class llvm::StringRef) C:\git\llvm-project\llvm\lib\Support\StringRef.cpp:613:0 #4 0x00007ff795833093 mlir::detail::AttributeUniquer::getWithTypeID C:\git\llvm-project\mlir\include\mlir\IR\AttributeSupport.h:196:0 #5 0x00007ff795833093 mlir::detail::AttributeUniquer::get C:\git\llvm-project\mlir\include\mlir\IR\AttributeSupport.h:177:0 #6 0x00007ff795833093 mlir::detail::StorageUserBase<class mlir::StringAttr, class mlir::Attribute, struct mlir::detail::StringAttrStorage, class mlir::detail::AttributeUniquer, struct mlir::TypedAttr::Trait>::get<class llvm::StringRef, class mlir::Type>(class mlir::MLIRContext *, class llvm::StringRef, class mlir::Type) C:\git\llvm-project\mlir\include\mlir\IR\StorageUniquerSupport.h:154:0 #7 0x00007ff79584eb02 llvm::SmallVector<char,32>::{dtor} C:\git\llvm-project\llvm\include\llvm\ADT\SmallVector.h:1190:0 #8 0x00007ff79584eb02 mlir::StringAttr::get(class mlir::MLIRContext *, class llvm::Twine const &) C:\git\llvm-project\mlir\lib\IR\BuiltinAttributes.cpp:307:0 #9 0x00007ff79588515a mlir::Builder::getNamedAttr(class llvm::StringRef, class mlir::Attribute) C:\git\llvm-project\mlir\lib\IR\Builders.cpp:88:0 #10 0x00007ff7972575bc `anonymous namespace'::CustomOpAsmParser::parseAffineMapOfSSAIds C:\git\llvm-project\mlir\lib\AsmParser\Parser.cpp:1605:0 #11 0x00007ff79448d654 mlir::LogicalResult::failed C:\git\llvm-project\mlir\include\mlir\Support\LogicalResult.h:44:0 #12 0x00007ff79448d654 mlir::failed C:\git\llvm-project\mlir\include\mlir\Support\LogicalResult.h:72:0 #13 0x00007ff79448d654 `parseAffineMapWithMinMax'::`2'::<lambda_1>::operator() C:\git\llvm-project\mlir\lib\Dialect\Affine\IR\AffineOps.cpp:3680:0 #14 0x00007ff79446ef89 mlir::ParseResult::{ctor} C:\git\llvm-project\mlir\include\mlir\Support\LogicalResult.h:122:0 #15 0x00007ff79446ef89 llvm::function_ref<mlir::ParseResult __cdecl(void)>::callback_fn<`parseAffineMapWithMinMax'::`2'::<lambda_1> > C:\git\llvm-project\llvm\include\llvm\ADT\STLFunctionalExtras.h:45:0 #16 0x00007ff79725960f mlir::LogicalResult::failed C:\git\llvm-project\mlir\include\mlir\Support\LogicalResult.h:44:0 #17 0x00007ff79725960f mlir::ParseResult::operator bool C:\git\llvm-project\mlir\include\mlir\Support\LogicalResult.h:125:0 #18 0x00007ff79725960f mlir::detail::Parser::parseCommaSeparatedList(enum mlir::AsmParser::Delimiter, class llvm::function_ref<(void)>, class llvm::StringRef) C:\git\llvm-project\mlir\lib\AsmParser\Parser.cpp:103:0 #19 0x00007ff79724e5ea mlir::detail::AsmParserImpl<class mlir::OpAsmParser>::parseCommaSeparatedList(enum mlir::AsmParser::Delimiter, class llvm::function_ref<(void)>, class llvm::StringRef) C:\git\llvm-project\mlir\lib\AsmParser\AsmParserImpl.h:286:0 #20 0x00007ff7944a8f97 mlir::LogicalResult::failed C:\git\llvm-project\mlir\include\mlir\Support\LogicalResult.h:44:0 #21 0x00007ff7944a8f97 mlir::ParseResult::operator bool C:\git\llvm-project\mlir\include\mlir\Support\LogicalResult.h:125:0 #22 0x00007ff7944a8f97 parseAffineMapWithMinMax C:\git\llvm-project\mlir\lib\Dialect\Affine\IR\AffineOps.cpp:3705:0 #23 0x00007ff7944a754f mlir::LogicalResult::failed C:\git\llvm-project\mlir\include\mlir\Support\LogicalResult.h:44:0 #24 0x00007ff7944a754f mlir::ParseResult::operator bool C:\git\llvm-project\mlir\include\mlir\Support\LogicalResult.h:125:0 #25 0x00007ff7944a754f mlir::AffineParallelOp::parse(class mlir::OpAsmParser &, struct mlir::OperationState &) C:\git\llvm-project\mlir\lib\Dialect\Affine\IR\AffineOps.cpp:3756:0 #26 0x00007ff794469ca8 llvm::detail::UniqueFunctionBase<class mlir::ParseResult, class mlir::OpAsmParser &, struct mlir::OperationState &>::CallImpl<class mlir::ParseResult (__cdecl *const)(class mlir::OpAsmParser &, struct mlir::OperationState &)>(void *, class mlir::OpAsmParser &, struct mlir::OperationState &) C:\git\llvm-project\llvm\include\llvm\ADT\FunctionExtras.h:221:0 #27 0x00007ff797251530 llvm::function_ref<(class mlir::OpAsmParser &, struct mlir::OperationState &)>::callback_fn<class llvm::unique_function<(class mlir::OpAsmParser &, struct mlir::OperationState &) const> const>(__int64, class mlir::OpAsmParser &, struct mlir::OperationState &) C:\git\llvm-project\llvm\include\llvm\ADT\STLFunctionalExtras.h:47:0 #28 0x00007ff797259cd1 `anonymous namespace'::OperationParser::parseCustomOperation C:\git\llvm-project\mlir\lib\AsmParser\Parser.cpp:1906:0 #29 0x00007ff79725d505 `anonymous namespace'::OperationParser::parseOperation C:\git\llvm-project\mlir\lib\AsmParser\Parser.cpp:1152:0 #30 0x00007ff797258940 `anonymous namespace'::OperationParser::parseBlock C:\git\llvm-project\mlir\lib\AsmParser\Parser.cpp:2099:0 #31 0x00007ff79725f401 mlir::LogicalResult::failed C:\git\llvm-project\mlir\include\mlir\Support\LogicalResult.h:44:0 #32 0x00007ff79725f401 mlir::ParseResult::operator bool C:\git\llvm-project\mlir\include\mlir\Support\LogicalResult.h:125:0 #33 0x00007ff79725f401 `anonymous namespace'::OperationParser::parseRegionBody C:\git\llvm-project\mlir\lib\AsmParser\Parser.cpp:2057:0 #34 0x00007ff79725f03c mlir::LogicalResult::failed C:\git\llvm-project\mlir\include\mlir\Support\LogicalResult.h:44:0 #35 0x00007ff79725f03c mlir::ParseResult::operator bool C:\git\llvm-project\mlir\include\mlir\Support\LogicalResult.h:125:0 #36 0x00007ff79725f03c `anonymous namespace'::OperationParser::parseRegion C:\git\llvm-project\mlir\lib\AsmParser\Parser.cpp:1993:0 #37 0x00007ff79725eeb3 mlir::LogicalResult::failed C:\git\llvm-project\mlir\include\mlir\Support\LogicalResult.h:44:0 #38 0x00007ff79725eeb3 mlir::ParseResult::operator bool C:\git\llvm-project\mlir\include\mlir\Support\LogicalResult.h:125:0 #39 0x00007ff79725eeb3 `anonymous namespace'::CustomOpAsmParser::parseRegion C:\git\llvm-project\mlir\lib\AsmParser\Parser.cpp:1690:0 #40 0x00007ff79725e67f llvm::optional_detail::OptionalStorage<mlir::ParseResult,1>::{ctor} C:\git\llvm-project\llvm\include\llvm\ADT\Optional.h:200:0 #41 0x00007ff79725e67f llvm::Optional<mlir::ParseResult>::{ctor} C:\git\llvm-project\llvm\include\llvm\ADT\Optional.h:278:0 #42 0x00007ff79725e67f mlir::OptionalParseResult::{ctor} C:\git\llvm-project\mlir\include\mlir\IR\OpDefinition.h:41:0 #43 0x00007ff79725e67f `anonymous namespace'::CustomOpAsmParser::parseOptionalRegion C:\git\llvm-project\mlir\lib\AsmParser\Parser.cpp:1701:0 #44 0x00007ff7958a66db mlir::function_interface_impl::parseFunctionOp(class mlir::OpAsmParser &, struct mlir::OperationState &, bool, class llvm::function_ref<(class mlir::Builder &, class llvm::ArrayRef<class mlir::Type>, class llvm::ArrayRef<class mlir::Type>, class mlir::function_interface_impl::VariadicFlag, class std::basic_string<char, struct std::char_traits<char>, class std::allocator<char>> &)>) C:\git\llvm-project\mlir\lib\IR\FunctionImplementation.cpp:232:0 #45 0x00007ff79470cab1 mlir::ml_program::SubgraphOp::parse(class mlir::OpAsmParser &, struct mlir::OperationState &) C:\git\llvm-project\mlir\lib\Dialect\Func\IR\FuncOps.cpp:266:0 #46 0x00007ff794469ca8 llvm::detail::UniqueFunctionBase<class mlir::ParseResult, class mlir::OpAsmParser &, struct mlir::OperationState &>::CallImpl<class mlir::ParseResult (__cdecl *const)(class mlir::OpAsmParser &, struct mlir::OperationState &)>(void *, class mlir::OpAsmParser &, struct mlir::OperationState &) C:\git\llvm-project\llvm\include\llvm\ADT\FunctionExtras.h:221:0 #47 0x00007ff797251530 llvm::function_ref<(class mlir::OpAsmParser &, struct mlir::OperationState &)>::callback_fn<class llvm::unique_function<(class mlir::OpAsmParser &, struct mlir::OperationState &) const> const>(__int64, class mlir::OpAsmParser &, struct mlir::OperationState &) C:\git\llvm-project\llvm\include\llvm\ADT\STLFunctionalExtras.h:47:0 #48 0x00007ff797259cd1 `anonymous namespace'::OperationParser::parseCustomOperation C:\git\llvm-project\mlir\lib\AsmParser\Parser.cpp:1906:0 #49 0x00007ff79725d505 `anonymous namespace'::OperationParser::parseOperation C:\git\llvm-project\mlir\lib\AsmParser\Parser.cpp:1152:0 #50 0x00007ff7972572b5 `anonymous namespace'::TopLevelOperationParser::parse C:\git\llvm-project\mlir\lib\AsmParser\Parser.cpp:2585:0 #51 0x00007ff7972584b0 mlir::parseAsmSourceFile(class llvm::SourceMgr const &, class mlir::Block *, class mlir::ParserConfig const &, class mlir::AsmParserState *, class mlir::AsmParserCodeCompleteContext *) C:\git\llvm-project\mlir\lib\AsmParser\Parser.cpp:2643:0 #52 0x00007ff79578b171 mlir::parseSourceFile(class llvm::SourceMgr const &, class mlir::Block *, class mlir::ParserConfig const &, class mlir::LocationAttr *) C:\git\llvm-project\mlir\lib\Parser\Parser.cpp:32:0 #53 0x00007ff79578a1cd mlir::parseSourceFile C:\git\llvm-project\mlir\include\mlir\Parser\Parser.h:147:0 #54 0x00007ff79578a1cd performActions C:\git\llvm-project\mlir\lib\Tools\mlir-opt\MlirOptMain.cpp:78:0 #55 0x00007ff79578ac75 processBuffer C:\git\llvm-project\mlir\lib\Tools\mlir-opt\MlirOptMain.cpp:136:0 #56 0x00007ff79578892d llvm::function_ref<mlir::LogicalResult __cdecl(std::unique_ptr<llvm::MemoryBuffer,std::default_delete<llvm::MemoryBuffer> >,llvm::raw_ostream &)>::callback_fn<`mlir::MlirOptMain'::`2'::<lambda_1> > C:\git\llvm-project\llvm\include\llvm\ADT\STLFunctionalExtras.h:45:0 #57 0x00007ff7957f6596 mlir::LogicalResult::failed C:\git\llvm-project\mlir\include\mlir\Support\LogicalResult.h:44:0 #58 0x00007ff7957f6596 mlir::failed C:\git\llvm-project\mlir\include\mlir\Support\LogicalResult.h:72:0 #59 0x00007ff7957f6596 `mlir::splitAndProcessBuffer'::`2'::<lambda_1>::operator() C:\git\llvm-project\mlir\lib\Support\ToolUtilities.cpp:88:0 #60 0x00007ff7957f6b48 llvm::interleave C:\git\llvm-project\llvm\include\llvm\ADT\STLExtras.h:1871:0 #61 0x00007ff7957f6b48 llvm::interleave C:\git\llvm-project\llvm\include\llvm\ADT\STLExtras.h:1889:0 #62 0x00007ff7957f6b48 mlir::splitAndProcessBuffer(class std::unique_ptr<class llvm::MemoryBuffer, struct std::default_delete<class llvm::MemoryBuffer>>, class llvm::function_ref<(class std::unique_ptr<class llvm::MemoryBuffer, struct std::default_delete<class llvm::MemoryBuffer>>, class llvm::raw_ostream &)>, class llvm::raw_ostream &, bool, bool) C:\git\llvm-project\mlir\lib\Support\ToolUtilities.cpp:91:0 #63 0x00007ff7957895e5 mlir::MlirOptMain C:\git\llvm-project\mlir\lib\Tools\mlir-opt\MlirOptMain.cpp:182:0 #64 0x00007ff7957895e5 mlir::MlirOptMain C:\git\llvm-project\mlir\lib\Tools\mlir-opt\MlirOptMain.cpp:201:0 #65 0x00007ff7957895e5 mlir::MlirOptMain(int, char **, class llvm::StringRef, class mlir::DialectRegistry &, bool) C:\git\llvm-project\mlir\lib\Tools\mlir-opt\MlirOptMain.cpp:288:0 #66 0x00007ff7943e42a9 std::vector<std::unique_ptr<mlir::DialectExtensionBase,std::default_delete<mlir::DialectExtensionBase> >,std::allocator<std::unique_ptr<mlir::DialectExtensionBase,std::default_delete<mlir::DialectExtensionBase> > > >::_Tidy C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\vector:1906:0 #67 0x00007ff7943e42a9 std::vector<std::unique_ptr<mlir::DialectExtensionBase,std::default_delete<mlir::DialectExtensionBase> >,std::allocator<std::unique_ptr<mlir::DialectExtensionBase,std::default_delete<mlir::DialectExtensionBase> > > >::{dtor} C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\vector:807:0 #68 0x00007ff7943e42a9 main C:\git\llvm-project\mlir\tools\mlir-opt\mlir-opt.cpp:229:0 #69 0x00007ff797299f9c invoke_main D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:78:0 #70 0x00007ff797299f9c __scrt_common_main_seh D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288:0 #71 0x00007ff934eb54e0 (C:\WINDOWS\System32\KERNEL32.DLL+0x154e0) #72 0x00007ff935ee485b (C:\WINDOWS\SYSTEM32\ntdll.dll+0x485b) error: command failed with exit status: 3221225477 $ "c:\git\llvm-project\stage1_msvc\bin\filecheck.exe" "C:\git\llvm-project\mlir\test\Dialect\Affine\ops.mlir" # command stderr: C:\git\llvm-project\mlir\test\Dialect\Affine\ops.mlir:156:17: error: CHECK-LABEL: expected string not found in input // CHECK-LABEL: func @parallel ^ <stdin>:69:38: note: scanning from here func.func @valid_symbol_affine_scope(%arg0: index, %arg1: memref<?xf32>) { ^ <stdin>:93:8: note: possible intended match here "test.func"() ({ ^ Input file: <stdin> Check file: C:\git\llvm-project\mlir\test\Dialect\Affine\ops.mlir -dump-input=help explains the following input dump. Input was: <<<<<< . . . 64: } 65: 66: 67: // ----- 68: module { 69: func.func @valid_symbol_affine_scope(%arg0: index, %arg1: memref<?xf32>) { label:156'0 X~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ error: no match found 70: test.affine_scopetest.affine_scope { label:156'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 71: %c1 = arith.constant 1 : index label:156'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 72: %0 = arith.subi %arg0, %c1 : index label:156'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 73: affine.for %arg2 = %0 to %arg0 { label:156'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 74: %1 = arith.subi %0, %arg2 : index label:156'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ . . . 88: label:156'0 ~ 89: label:156'0 ~ 90: // ----- label:156'0 ~~~~~~~~~ 91: module { label:156'0 ~~~~~~~~~ 92: %0 = "test.foo"() : () -> index label:156'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 93: "test.func"() ({ label:156'0 ~~~~~~~~~~~~~~~~~~ label:156'1 ? possible intended match 94: ^bb0(%arg0: memref<?xf32>): label:156'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 95: %1 = affine.load %arg0[%0] : memref<?xf32> label:156'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 96: label:156'0 ~ >>>>>> error: command failed with exit status: 1 -- ******************** Testing: 0.. 10.. 20.. 30.. 40.. 50.. 60.. 70.. 80.. 90.. ******************** Failed Tests (1): MLIR :: Dialect/Affine/ops.mlir Testing Time: 10.66s Unsupported: 335 Passed : 1376 Failed : 1 FAILED: tools/mlir/test/CMakeFiles/check-mlir C:/git/llvm-project/stage1_msvc/tools/mlir/test/CMakeFiles/check-mlir cmd.exe /C "cd /D C:\git\llvm-project\stage1_msvc\tools\mlir\test && C:\Users\alex_\scoop\apps\python\3.10.1\python.exe C:/git/llvm-project/stage1_msvc/./bin/llvm-lit.py -sv C:/git/llvm-project/stage1_msvc/tools/mlir/test" ninja: build stopped: subcommand failed.
I'm using the following to build:
> cmake -GNinja %ROOT%/llvm -DCMAKE_BUILD_TYPE=Release -DLLVM_OPTIMIZED_TABLEGEN=ON -DLLVM_ENABLE_LIBXML2=OFF -DCMAKE_C_COMPILER=cl.exe -DCMAKE_CXX_COMPILER=cl.exe -DCMAKE_LINKER=link.exe -DLLVM_ENABLE_PROJECTS="llvm;clang;lld;clang-tools-extra;mlir" -DLLVM_USE_CRT_RELEASE=MT -DLLVM_ENABLE_PDB=ON -DLLVM_ENABLE_ASSERTIONS=ON
I think the MSVC optimizer optimizes too much, which leads to the constexpr variable being half-empty when entering the lambda function. In Debug mode things are fine.