<div dir="ltr">I cannot understand the root cause of the assertion with stack trace only.<div>It's linked to an atomic load that is not setup properly at the IR level so it can come from a lot of places (clang itself or an IR optimisation pass to name a few).</div><div>It would be nice to have a reduced example indeed.</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Jan 16, 2020 at 5:09 PM Alexandre Ganea via Phabricator <<a href="mailto:reviews@reviews.llvm.org">reviews@reviews.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">aganea added a comment.<br>
Herald added a subscriber: kerbowa.<br>
<br>
Hi! Since this is the last commit in `Instructions.cpp`, you can maybe help?<br>
<br>
I'm seeing an assertion in one of our projects. I'm at rG28bb43bdf808c7e737eabfb6f6a368ace9086a9f <<a href="https://reviews.llvm.org/rG28bb43bdf808c7e737eabfb6f6a368ace9086a9f" rel="noreferrer" target="_blank">https://reviews.llvm.org/rG28bb43bdf808c7e737eabfb6f6a368ace9086a9f</a>>.<br>
I'm using the following cmake to build on Windows:<br>
<br>
  > set LLVM=c:/Program Files/LLVM<br>
  > %LLVM%\bin\clang-cl --version<br>
  clang version 9.0.0 (tags/RELEASE_900/final)<br>
  Target: x86_64-pc-windows-msvc<br>
  Thread model: posix<br>
  InstalledDir: C:\Program Files\LLVM\bin<br>
<br>
  > cmake -GNinja %ROOT%/llvm -DCMAKE_BUILD_TYPE=Release -DLLVM_OPTIMIZED_TABLEGEN=true -DLLVM_ENABLE_ASSERTIONS=ON -DLLVM_ENABLE_LIBXML2=OFF -DLLVM_USE_CRT_RELEASE=MT -DCMAKE_C_COMPILER="%LLVM%/bin/clang-cl.EXE" -DCMAKE_CXX_COMPILER="%LLVM%/bin/clang-cl.EXE" -DCMAKE_LINKER="%LLVM%/bin/link.EXE" -DLLVM_ENABLE_PDB=true -DCMAKE_CXX_FLAGS="/GS- /D_ITERATOR_DEBUG_LEVEL=0 /arch:AVX2" -DCMAKE_C_FLAGS="/GS- /D_ITERATOR_DEBUG_LEVEL=0 /arch:AVX2" -DLLVM_ENABLE_PROJECTS="llvm;clang;lld" -DLLVM_ENABLE_PDB=ON<br>
<br>
The assertion is this:<br>
<br>
  Assertion failed: !(isAtomic() && getAlignment() == 0) && "Alignment required for atomic load", file D:\llvm-project\llvm\lib\IR\Instructions.cpp, line 1287<br>
  Stack dump:<br>
  0.    Program arguments: D:\llvm-project\buildNinjaRel\bin\clang-cl.exe (stripped).cpp /Fo(stripped).obj /c /Yu(stripped).h /Fp(stripped).pch /FI(stripped).h (stripped project-specific /I) /Z7 /nologo /W0 /WX- (stripped project-specific /D)  /DWIN32_LEAN_AND_MEAN /DWIN64 /DWINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP /D_ENABLE_EXTENDED_ALIGNED_STORAGE /D_LIB /D_SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS /D_WIN32_WINNT=0x0601 /D__clang__=1 /GF /EHsc /MT /GS /Gy- /fp:fast /fp:except- /Zc:wchar_t /Zc:forScope /Zc:inline /GR- /openmp- /Fd(stripped).pdb /Gd /wd4100 /wd4127 /wd4189 /wd4201 /wd4206 /wd4503 /wd4505 /wd4511 /wd4512 /wd4611 /wd4702 /wd4714 /wd4748 /wd4800 /TP -m64 -fmsc-version=1910 /errorReport:queue /D_MBCS /bigobj /FC /permissive- /Zc:twoPhase- /Zc:strictStrings /Zc:ternary- /Zo -fdiagnostics-absolute-paths -march=haswell -Wno-c++11-narrowing /O2 /Ob2 /Oi /Ot /Oy- /showIncludes<br>
  1.    <eof> parser at end of file<br>
  2.    Per-module optimization passes<br>
  3.    Running pass 'CallGraph Pass Manager' on module '(stripped).cpp'.<br>
  4.    Running pass 'Jump Threading' on function '(stripped)'<br>
   #0 0x00007ff716254c56 HandleAbort D:\llvm-project\llvm\lib\Support\Windows\Signals.inc:408:0<br>
   #1 0x00007ff719e994a5 raise minkernel\crts\ucrt\src\appcrt\misc\signal.cpp:547:0<br>
   #2 0x00007ff719e8f13c abort minkernel\crts\ucrt\src\appcrt\startup\abort.cpp:71:0<br>
   #3 0x00007ff719e8f7da common_assert_to_stderr<wchar_t> minkernel\crts\ucrt\src\appcrt\startup\assert.cpp:186:0<br>
   #4 0x00007ff719e8f682 _wassert minkernel\crts\ucrt\src\appcrt\startup\assert.cpp:443:0<br>
   #5 0x00007ff71657c161 llvm::LoadInst::LoadInst(class llvm::Type *, class llvm::Value *, class llvm::Twine const &, bool, struct llvm::MaybeAlign, enum llvm::AtomicOrdering, unsigned char, class llvm::Instruction *) D:\llvm-project\llvm\lib\IR\Instructions.cpp:1325:0<br>
   #6 0x00007ff716587a5b llvm::LoadInst::cloneImpl(void) const D:\llvm-project\llvm\lib\IR\Instructions.cpp:4147:0<br>
   #7 0x00007ff71680ca7c llvm::Instruction::clone(void) const D:\llvm-project\llvm\include\llvm\IR\Instruction.def:172:0<br>
   #8 0x00007ff7160c85f1 llvm::JumpThreadingPass::CloneInstructions(class llvm::ilist_iterator<struct llvm::ilist_detail::node_options<class llvm::Instruction, 1, 0, void>, 0, 0>, class llvm::ilist_iterator<struct llvm::ilist_detail::node_options<class llvm::Instruction, 1, 0, void>, 0, 0>, class llvm::BasicBlock *, class llvm::BasicBlock *) D:\llvm-project\llvm\lib\Transforms\Scalar\JumpThreading.cpp:2001:0<br>
   #9 0x00007ff7160c92b1 llvm::JumpThreadingPass::ThreadEdge(class llvm::BasicBlock *, class llvm::SmallVectorImpl<class llvm::BasicBlock *> const &, class llvm::BasicBlock *) D:\llvm-project\llvm\lib\Transforms\Scalar\JumpThreading.cpp:2105:0<br>
  #10 0x00007ff7160c6582 llvm::JumpThreadingPass::TryThreadEdge(class llvm::BasicBlock *, class llvm::SmallVectorImpl<class llvm::BasicBlock *> const &, class llvm::BasicBlock *) D:\llvm-project\llvm\lib\Transforms\Scalar\JumpThreading.cpp:2051:0<br>
  #11 0x00007ff7160c3209 llvm::JumpThreadingPass::ProcessThreadableEdges(class llvm::Value *, class llvm::BasicBlock *, enum llvm::jumpthreading::ConstantPreference, class llvm::Instruction *) D:\llvm-project\llvm\lib\Transforms\Scalar\JumpThreading.cpp:1720:0<br>
  #12 0x00007ff7160be44d llvm::JumpThreadingPass::ProcessBlock(class llvm::BasicBlock *) D:\llvm-project\llvm\lib\Transforms\Scalar\JumpThreading.cpp:0:0<br>
  #13 0x00007ff7160bc90b llvm::JumpThreadingPass::runImpl(class llvm::Function &, class llvm::TargetLibraryInfo *, class llvm::LazyValueInfo *, class llvm::AAResults *, class llvm::DomTreeUpdater *, bool, class std::unique_ptr<class llvm::BlockFrequencyInfo, struct std::default_delete<class llvm::BlockFrequencyInfo>>, class std::unique_ptr<class llvm::BranchProbabilityInfo, struct std::default_delete<class llvm::BranchProbabilityInfo>>) D:\llvm-project\llvm\lib\Transforms\Scalar\JumpThreading.cpp:397:0<br>
  #14 0x00007ff7160cbadd `anonymous namespace'::JumpThreading::runOnFunction D:\llvm-project\llvm\lib\Transforms\Scalar\JumpThreading.cpp:315:0<br>
  #15 0x00007ff715ebab56 llvm::FPPassManager::runOnFunction(class llvm::Function &) D:\llvm-project\llvm\lib\IR\LegacyPassManager.cpp:1481:0<br>
  #16 0x00007ff716f2e45b `anonymous namespace'::CGPassManager::runOnModule D:\llvm-project\llvm\lib\Analysis\CallGraphSCCPass.cpp:497:0<br>
  #17 0x00007ff715ebb4e1 llvm::legacy::PassManagerImpl::run(class llvm::Module &) D:\llvm-project\llvm\lib\IR\LegacyPassManager.cpp:1694:0<br>
  #18 0x00007ff717283634 clang::EmitBackendOutput(class clang::DiagnosticsEngine &, class clang::HeaderSearchOptions const &, class clang::CodeGenOptions const &, class clang::TargetOptions const &, class clang::LangOptions const &, class llvm::DataLayout const &, class llvm::Module *, enum clang::BackendAction, class std::unique_ptr<class llvm::raw_pwrite_stream, struct std::default_delete<class llvm::raw_pwrite_stream>>) D:\llvm-project\clang\lib\CodeGen\BackendUtil.cpp:1550:0<br>
  #19 0x00007ff7175cb82b clang::BackendConsumer::HandleTranslationUnit(class clang::ASTContext &) D:\llvm-project\clang\lib\CodeGen\CodeGenAction.cpp:339:0<br>
  #20 0x00007ff718cef6b3 clang::ParseAST(class clang::Sema &, bool, bool) D:\llvm-project\clang\lib\Parse\ParseAST.cpp:178:0<br>
  #21 0x00007ff71752fd95 clang::FrontendAction::Execute(void) D:\llvm-project\clang\lib\Frontend\FrontendAction.cpp:940:0<br>
  #22 0x00007ff71634a41b clang::CompilerInstance::ExecuteAction(class clang::FrontendAction &) D:\llvm-project\clang\lib\Frontend\CompilerInstance.cpp:965:0<br>
  #23 0x00007ff7163a8777 clang::ExecuteCompilerInvocation(class clang::CompilerInstance *) D:\llvm-project\clang\lib\FrontendTool\ExecuteCompilerInvocation.cpp:290:0<br>
  #24 0x00007ff715af788a cc1_main(class llvm::ArrayRef<char const *>, char const *, void *) D:\llvm-project\clang\tools\driver\cc1_main.cpp:239:0<br>
  #25 0x00007ff715af48aa ExecuteCC1Tool D:\llvm-project\clang\tools\driver\driver.cpp:340:0<br>
  #26 0x00007ff71736695e llvm::function_ref<void ()>::callback_fn<`lambda at D:\llvm-project\clang\lib\Driver\Job.cpp:402:22'> D:\llvm-project\llvm\include\llvm\ADT\STLExtras.h:108:0<br>
  #27 0x00007ff71620bf2a InvokeFunctionCall D:\llvm-project\llvm\lib\Support\CrashRecoveryContext.cpp:207:0<br>
  #28 0x00007ff71620beed llvm::CrashRecoveryContext::RunSafely(class llvm::function_ref<(void)>) D:\llvm-project\llvm\lib\Support\CrashRecoveryContext.cpp:214:0<br>
  #29 0x00007ff71736625a clang::driver::CC1Command::Execute(class llvm::ArrayRef<class llvm::Optional<class llvm::StringRef>>, class std::basic_string<char, struct std::char_traits<char>, class std::allocator<char>> *, bool *) const D:\llvm-project\clang\lib\Driver\Job.cpp:402:0<br>
  #30 0x00007ff71631584f clang::driver::Compilation::ExecuteCommand(class clang::driver::Command const &, class clang::driver::Command const *&) const D:\llvm-project\clang\lib\Driver\Compilation.cpp:182:0<br>
  #31 0x00007ff716315bb9 clang::driver::Compilation::ExecuteJobs(class clang::driver::JobList const &, class llvm::SmallVectorImpl<struct std::pair<int, class clang::driver::Command const *>> &) const D:\llvm-project\clang\lib\Driver\Compilation.cpp:233:0<br>
  #32 0x00007ff716328c97 clang::driver::Driver::ExecuteCompilation(class clang::driver::Compilation &, class llvm::SmallVectorImpl<struct std::pair<int, class clang::driver::Command const *>> &) D:\llvm-project\clang\lib\Driver\Driver.cpp:1476:0<br>
  #33 0x00007ff715af3f59 main D:\llvm-project\clang\tools\driver\driver.cpp:493:0<br>
  #34 0x00007ff719e7b788 __scrt_common_main_seh d:\agent\_work\5\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288:0<br>
  #35 0x00007ffb60747bd4 (C:\WINDOWS\System32\KERNEL32.DLL+0x17bd4)<br>
  #36 0x00007ffb610eced1 (C:\WINDOWS\SYSTEM32\ntdll.dll+0x6ced1)<br>
<br>
I can try to c-reduce if that's necessary.<br>
<br>
Can you help or should I ask on the mailing list?<br>
<br>
<br>
Repository:<br>
  rG LLVM Github Monorepo<br>
<br>
CHANGES SINCE LAST ACTION<br>
  <a href="https://reviews.llvm.org/D71547/new/" rel="noreferrer" target="_blank">https://reviews.llvm.org/D71547/new/</a><br>
<br>
<a href="https://reviews.llvm.org/D71547" rel="noreferrer" target="_blank">https://reviews.llvm.org/D71547</a><br>
<br>
<br>
<br>
</blockquote></div>