<div dir="ltr">Ismall:<div><br></div><div>I'm still having problems finding reproducing this corruption locally, but I may have a patch. Can you check if this works? </div><div>If it doesn't, maybe you can spot what I'm doing wrong in my reproduction steps.<br></div><div><br></div><div><div>Thanks, </div><div><br></div><div>-Nirav</div></div><div><br></div><div><br></div><div>1. </div><div><div><br></div><div>export MALLOC_CHECK_=3</div><div>export MALLOC_PERTURB_=69</div></div><div><br></div><div>2. Run clang -cc1 internal call from llvm-symbolizer.cpp compilation from CMake</div><div><br></div><div>gdb --args  /usr/local/google/home/niravd/build/llvm/build_debug/bin/clang-3.9 -cc1 -triple x86_64-unknown-linux-gnu -emit-obj -disable-free -g -main-file-name llvm-symbolizer.cpp -mrelocation-model pic -pic-level 2 -mthread-model posix -fmath-errno -masm-verbose -mconstructor-aliases -munwind-tables -fuse-init-array -target-cpu x86-64 -momit-leaf-frame-pointer -v -dwarf-column-info -debugger-tuning=gdb -ffunction-sections -fdata-sections -D GTEST_HAS_RTTI=0 -D _GNU_SOURCE -D __STDC_CONSTANT_MACROS -D __STDC_FORMAT_MACROS -D __STDC_LIMIT_MACROS -I tools/llvm-symbolizer -I /usr/local/google/home/niravd/build/llvm_alt/llvm/tools/llvm-symbolizer -I include -I /usr/local/google/home/niravd/build/llvm_alt/llvm/include -D NDEBUG -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../include/c++/4.8 -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../include/x86_64-linux-gnu/c++/4.8 -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../include/x86_64-linux-gnu/c++/4.8 -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../include/c++/4.8/backward -internal-isystem /usr/local/include -internal-isystem /usr/local/google/home/niravd/build/llvm/build_debug/bin/../lib/clang/4.0.0/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -O3 -Wall -W -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wmissing-field-initializers -Wno-long-long -Wcovered-switch-default -Wnon-virtual-dtor -Wdelete-non-virtual-dtor -Werror=date-time -pedantic -std=c++11 -fdeprecated-macro -fdebug-compilation-dir /usr/local/google/home/niravd/build/llvm_alt/llvm -ferror-limit 19 -fmessage-length 211 -fvisibility-inlines-hidden -fno-rtti -fobjc-runtime=gcc -fdiagnostics-show-option -fcolor-diagnostics -vectorize-loops -vectorize-slp -o /tmp/llvm-symbolizer.cpp.o -x c++ /usr/local/google/home/niravd/build/llvm_alt/llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp<br></div><div><br></div><div>3. Initialize mcheck(0)</div><div><br></div><div>break main</div><div>commands</div><div>call mcheck(0)</div><div>continue</div><div>end</div><div><br></div><div>4. Inspect in llvm::SelectionDAG::TransferDbgValues checking that the values of Dbg are reasonable. </div><div><br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Jul 15, 2016 at 5:20 AM, Ismail Donmez <span dir="ltr"><<a href="mailto:ismail@i10z.com" target="_blank">ismail@i10z.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi,<br>
<br>
This is most certainly a memory corruption:<br>
<br>
#0  llvm::SelectionDAG::TransferDbgValues (this=<optimized out>,<br>
From=..., To=...)<br>
    at ../lib/CodeGen/SelectionDAG/SelectionDAG.cpp:6666<br>
6666        if (Dbg->getKind() == SDDbgValue::SDNODE &&<br>
(gdb) print Dbg<br>
$1 = (llvm::SDDbgValue *) 0x4545454545454545<br>
<br>
<br>
The value 0x45 is what I set as MALLOC_PERTURB_ [0] value. You can<br>
easily reproduce this on Linux with malloc debugging, just do<br>
<br>
export MALLOC_CHECK_=3<br>
export MALLOC_PERTURB_=69<br>
<br>
See <a href="https://www.gnu.org/software/libc/manual/html_node/Heap-Consistency-Checking.html" rel="noreferrer" target="_blank">https://www.gnu.org/software/libc/manual/html_node/Heap-Consistency-Checking.html</a><br>
for more details.<br>
<div class="HOEnZb"><div class="h5"><br>
On Thu, Jul 14, 2016 at 8:02 PM, Ismail Donmez <<a href="mailto:ismail@i10z.com">ismail@i10z.com</a>> wrote:<br>
> Hi,<br>
><br>
> On Thu, Jun 23, 2016 at 8:52 PM, Nirav Dave via llvm-commits<br>
> <<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br>
>> Author: niravd<br>
>> Date: Thu Jun 23 12:52:57 2016<br>
>> New Revision: 273585<br>
>><br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=273585&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=273585&view=rev</a><br>
>> Log:<br>
>> Preserve DebugInfo when replacing values in DAGCombiner<br>
>><br>
>> Recommiting after correcting over-eager Debug Value transfer fixing PR28270.<br>
>><br>
>> [DAG] Previously debug values would transfer debuginfo for the selected<br>
>> start node for a replacement which allows for debug to be dropped.<br>
>><br>
>> Push debug value transfer to occur with node/value replacement in<br>
>> SelectionDAG, remove now extraneous transfers of debug values.<br>
>><br>
>> This refixes PR9817 which was being incompletely checked in the<br>
>> testsuite.<br>
><br>
> Can't get a reproducer easily yet but this is crashing clang in stage2<br>
> bootstrap while compiling llvm-symbolizer.cpp  with a backtrace like:<br>
><br>
> #0 0x00007ff3a922cec8 llvm::sys::PrintStackTrace(llvm::raw_ostream&)<br>
> /home/abuild/rpmbuild/BUILD/llvm/stage1/../lib/Support/Unix/Signals.inc:402:13<br>
> #1 0x00007ff3a922ad26 bool std::__1::operator!=<std::__1::pair<void<br>
> (*)(void*), void*>*>(std::__1::__wrap_iter<std::__1::pair<void<br>
> (*)(void*), void*>*> const&, std::__1::__wrap_iter<std::__1::pair<void<br>
> (*)(void*), void*>*> const&)<br>
> /usr/bin/../include/c++/v1/iterator:1364:12<br>
> #2 0x00007ff3a922ad26 llvm::sys::RunSignalHandlers()<br>
> /home/abuild/rpmbuild/BUILD/llvm/stage1/../lib/Support/Signals.cpp:44:0<br>
> #3 0x00007ff3a922d501 SignalHandler(int)<br>
> /home/abuild/rpmbuild/BUILD/llvm/stage1/../lib/Support/Unix/Signals.inc:256:1<br>
> #4 0x00007ff3a8ce4ef0 __restore_rt (/lib64/libpthread.so.0+0x10ef0)<br>
> #5 0x00007ff3a779d7b3<br>
> llvm::SelectionDAG::TransferDbgValues(llvm::SDValue, llvm::SDValue)<br>
> /home/abuild/rpmbuild/BUILD/llvm/stage1/../lib/CodeGen/SelectionDAG/SelectionDAG.cpp:6666:46<br>
> #6 0x00007ff3a779d551 llvm::SDValue::operator==(llvm::SDValue const&)<br>
> const /home/abuild/rpmbuild/BUILD/llvm/stage1/../include/llvm/CodeGen/SelectionDAGNodes.h:126:27<br>
> #7 0x00007ff3a779d551<br>
> llvm::SelectionDAG::ReplaceAllUsesWith(llvm::SDValue, llvm::SDValue)<br>
> /home/abuild/rpmbuild/BUILD/llvm/stage1/../lib/CodeGen/SelectionDAG/SelectionDAG.cpp:6312:0<br>
> #8 0x00007ff3a768d6e0 (anonymous<br>
> namespace)::SelectionDAGLegalize::ReplaceNode(llvm::SDValue,<br>
> llvm::SDValue) /home/abuild/rpmbuild/BUILD/llvm/stage1/../lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:190:9<br>
> #9 0x00007ff3a768b21f (anonymous<br>
> namespace)::SelectionDAGLegalize::LegalizeOp(llvm::SDNode*)<br>
> /home/abuild/rpmbuild/BUILD/llvm/stage1/../lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1128:11<br>
> #10 0x00007ff3a768a585 llvm::SelectionDAG::Legalize()<br>
> /home/abuild/rpmbuild/BUILD/llvm/stage1/../lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:4428:28<br>
> #11 0x00007ff3a77b1d34 llvm::TimeRegion::~TimeRegion()<br>
> /home/abuild/rpmbuild/BUILD/llvm/stage1/../include/llvm/Support/Timer.h:148:9<br>
> #12 0x00007ff3a77b1d34 llvm::SelectionDAGISel::CodeGenAndEmitDAG()<br>
> /home/abuild/rpmbuild/BUILD/llvm/stage1/../lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:824:0<br>
> #13 0x00007ff3a77b027d<br>
> llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&)<br>
> /home/abuild/rpmbuild/BUILD/llvm/stage1/../lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1482:7<br>
> #14 0x00007ff3a77ac88b<br>
> llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&)<br>
> /home/abuild/rpmbuild/BUILD/llvm/stage1/../lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:505:36<br>
> #15 0x00007ff3aa6a4451 (anonymous<br>
> namespace)::X86DAGToDAGISel::runOnMachineFunction(llvm::MachineFunction&)<br>
> /home/abuild/rpmbuild/BUILD/llvm/stage1/../lib/Target/X86/X86ISelDAGToDAG.cpp:176:7<br>
> #16 0x00007ff3a9ca0aa5<br>
> llvm::MachineFunctionPass::runOnFunction(llvm::Function&)<br>
> /home/abuild/rpmbuild/BUILD/llvm/stage1/../lib/CodeGen/MachineFunctionPass.cpp:60:13<br>
> #17 0x00007ff3a995df04<br>
> llvm::FPPassManager::runOnFunction(llvm::Function&)<br>
> /home/abuild/rpmbuild/BUILD/llvm/stage1/../lib/IR/LegacyPassManager.cpp:1526:23<br>
> #18 0x00007ff3a995e14b llvm::FPPassManager::runOnModule(llvm::Module&)<br>
> /home/abuild/rpmbuild/BUILD/llvm/stage1/../lib/IR/LegacyPassManager.cpp:1547:13<br>
> #19 0x00007ff3a995e5b3 (anonymous<br>
> namespace)::MPPassManager::runOnModule(llvm::Module&)<br>
> /home/abuild/rpmbuild/BUILD/llvm/stage1/../lib/IR/LegacyPassManager.cpp:1603:23<br>
> #20 0x00007ff3a995e5b3<br>
> llvm::legacy::PassManagerImpl::run(llvm::Module&)<br>
> /home/abuild/rpmbuild/BUILD/llvm/stage1/../lib/IR/LegacyPassManager.cpp:1706:0<br>
> #21 0x00007ff3a86332ed (anonymous<br>
> namespace)::EmitAssemblyHelper::EmitAssembly(clang::BackendAction,<br>
> llvm::raw_pwrite_stream*)<br>
> /home/abuild/rpmbuild/BUILD/llvm/stage1/../tools/clang/lib/CodeGen/BackendUtil.cpp:767:3<br>
> #22 0x00007ff3a86332ed<br>
> clang::EmitBackendOutput(clang::DiagnosticsEngine&,<br>
> clang::CodeGenOptions const&, clang::TargetOptions const&,<br>
> clang::LangOptions const&, llvm::DataLayout const&, llvm::Module*,<br>
> clang::BackendAction, llvm::raw_pwrite_stream*)<br>
> /home/abuild/rpmbuild/BUILD/llvm/stage1/../tools/clang/lib/CodeGen/BackendUtil.cpp:778:0<br>
> #23 0x00007ff3a88317dd<br>
> clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&)<br>
> /home/abuild/rpmbuild/BUILD/llvm/stage1/../tools/clang/lib/CodeGen/CodeGenAction.cpp:178:7<br>
> #24 0x00007ff3a661d376<br>
> std::__1::enable_if<(is_move_constructible<bool>::value) &&<br>
> (is_move_assignable<bool>::value), void>::type<br>
> std::__1::swap<bool>(bool&, bool&)<br>
> /usr/bin/../include/c++/v1/type_traits:4206:9<br>
> #25 0x00007ff3a661d376 clang::ParseAST(clang::Sema&, bool, bool)<br>
> /home/abuild/rpmbuild/BUILD/llvm/stage1/../tools/clang/lib/Parse/ParseAST.cpp:169:0<br>
> #26 0x00007ff3a83b3ee6 clang::FrontendAction::Execute()<br>
> /home/abuild/rpmbuild/BUILD/llvm/stage1/../tools/clang/lib/Frontend/FrontendAction.cpp:461:7<br>
> #27 0x00007ff3a8377c21<br>
> clang::CompilerInstance::ExecuteAction(clang::FrontendAction&)<br>
> /home/abuild/rpmbuild/BUILD/llvm/stage1/../tools/clang/lib/Frontend/CompilerInstance.cpp:877:7<br>
> #28 0x00007ff3aa8c3bb9<br>
> clang::ExecuteCompilerInvocation(clang::CompilerInstance*)<br>
> /home/abuild/rpmbuild/BUILD/llvm/stage1/../tools/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp:241:18<br>
> #29 0x000000000040ec2a cc1_main(llvm::ArrayRef<char const*>, char<br>
> const*, void*) /home/abuild/rpmbuild/BUILD/llvm/stage1/../tools/clang/tools/driver/cc1_main.cpp:116:13<br>
> #30 0x000000000040d895 ExecuteCC1Tool(llvm::ArrayRef<char const*>,<br>
> llvm::StringRef)<br>
> /home/abuild/rpmbuild/BUILD/llvm/stage1/../tools/clang/tools/driver/driver.cpp:301:12<br>
> #31 0x000000000040d895 main<br>
> /home/abuild/rpmbuild/BUILD/llvm/stage1/../tools/clang/tools/driver/driver.cpp:382:0<br>
> #32 0x00007ff3a795d741 __libc_start_main (/lib64/libc.so.6+0x20741)<br>
> #33 0x000000000040a829 _start<br>
> /home/abuild/rpmbuild/BUILD/glibc-2.23/csu/../sysdeps/x86_64/start.S:121:0<br>
><br>
> Hopefully will have more ideas later on.<br>
</div></div></blockquote></div><br></div>