[LLVMbugs] [Bug 22883] New: Assertion `(InputFlag & ~0xffff) == 0 && "High bits already contain data"' failed.

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Thu Mar 12 09:12:39 PDT 2015


https://llvm.org/bugs/show_bug.cgi?id=22883

            Bug ID: 22883
           Summary: Assertion `(InputFlag & ~0xffff) == 0 && "High bits
                    already contain data"' failed.
           Product: new-bugs
           Version: trunk
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: P
         Component: new bugs
          Assignee: unassignedbugs at nondot.org
          Reporter: sami.liedes at iki.fi
                CC: llvmbugs at cs.uiuc.edu
    Classification: Unclassified

My bot[1], which runs clang trunk on ~11k fuzzer-generated test cases that have
at some point crashed clang, detected that r232027 causes a new assertion
failure.

The offending commit was:

------------------------------------------------------------
Author: Daniel Sanders <daniel.sanders at imgtec.com>
Date:   Thu Mar 12 11:00:48 2015 +0000

    Add infrastructure for support of multiple memory constraints.

    Summary:
    The operand flag word for ISD::INLINEASM nodes now contains a 15-bit
    memory constraint ID when the operand kind is Kind_Mem. This constraint
    ID is a numeric equivalent to the constraint code string and is converted
    with a target specific hook in TargetLowering.

    This patch maps all memory constraints to InlineAsm::Constraint_m so there
    is no functional change at this point. It just proves that using these
    previously unused bits in the encoding of the flag word doesn't break
anything.

    The next patch will make each target preserve the current mapping of
    everything to Constraint_m for itself while changing the target independent
    implementation of the hook to return Constraint_Unknown appropriately. Each
    target will then be adapted in separate patches to use appropriate
Constraint_*
    values.

    Reviewers: hfinkel

    Reviewed By: hfinkel

    Subscribers: hfinkel, jholewinski, llvm-commits

    Differential Revision: http://reviews.llvm.org/D8171


    git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@232027
91177308-0d34-0410-b5e6-96231b3b80d8
------------------------------------------------------------

Here is a test case to trigger the assertion:

------------------------------------------------------------
int l;
void fn1() { __asm__("" : "+r,m"(l)); }
------------------------------------------------------------

Stack trace:

------------------------------------------------------------
clang-3.7:
/home/sliedes/scratch/build/clang-triage/llvm.src/include/llvm/IR/InlineAsm.h:262:
static unsigned int llvm::InlineAsm::getFlagWordForMatchingOp(unsigned int,
unsigned int): Assertion `(InputFlag & ~0xffff) == 0 && "High bits already
contain data"' failed.
#0 0x144395a llvm::sys::PrintStackTrace(llvm::raw_ostream&)
/home/sliedes/scratch/build/clang-triage/llvm.src/lib/Support/Unix/Signals.inc:424:15
#1 0x144520b SignalHandler(int)
/home/sliedes/scratch/build/clang-triage/llvm.src/lib/Support/Unix/Signals.inc:199:3
#2 0x7f627c31a8d0 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0xf8d0)
#3 0x7f627b55a107 gsignal
/build/glibc-Y1PEyp/glibc-2.19/signal/../nptl/sysdeps/unix/sysv/linux/raise.c:56:0
#4 0x7f627b55b4e8 abort /build/glibc-Y1PEyp/glibc-2.19/stdlib/abort.c:91:0
#5 0x7f627b553226 __assert_fail_base
/build/glibc-Y1PEyp/glibc-2.19/assert/assert.c:92:0
#6 0x7f627b5532d2 (/lib/x86_64-linux-gnu/libc.so.6+0x2e2d2)
#7 0x175b7e9 llvm::InlineAsm::getFlagWord(unsigned int, unsigned int)
/home/sliedes/scratch/build/clang-triage/llvm.src/include/llvm/IR/InlineAsm.h:251:5
#8 0x175b7e9 llvm::SelectionDAGBuilder::visitInlineAsm(llvm::ImmutableCallSite)
/home/sliedes/scratch/build/clang-triage/llvm.src/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp:6737:0
#9 0x1745d52 llvm::Value::getValueID() const
/home/sliedes/scratch/build/clang-triage/llvm.src/include/llvm/IR/Value.h:367:12
#10 0x1745d52 llvm::Instruction::getOpcode() const
/home/sliedes/scratch/build/clang-triage/llvm.src/include/llvm/IR/Instruction.h:92:0
#11 0x1745d52 llvm::Instruction::isTerminator() const
/home/sliedes/scratch/build/clang-triage/llvm.src/include/llvm/IR/Instruction.h:95:0
#12 0x1745d52 llvm::TerminatorInst::classof(llvm::Instruction const*)
/home/sliedes/scratch/build/clang-triage/llvm.src/include/llvm/IR/InstrTypes.h:73:0
#13 0x1745d52 llvm::isa_impl<llvm::TerminatorInst, llvm::Instruction,
void>::doit(llvm::Instruction const&)
/home/sliedes/scratch/build/clang-triage/llvm.src/include/llvm/Support/Casting.h:56:0
#14 0x1745d52 llvm::isa_impl_cl<llvm::TerminatorInst, llvm::Instruction
const*>::doit(llvm::Instruction const*)
/home/sliedes/scratch/build/clang-triage/llvm.src/include/llvm/Support/Casting.h:96:0
#15 0x1745d52 llvm::isa_impl_wrap<llvm::TerminatorInst, llvm::Instruction
const*, llvm::Instruction const*>::doit(llvm::Instruction const* const&)
/home/sliedes/scratch/build/clang-triage/llvm.src/include/llvm/Support/Casting.h:122:0
#16 0x1745d52 llvm::isa_impl_wrap<llvm::TerminatorInst, llvm::Instruction
const* const, llvm::Instruction const*>::doit(llvm::Instruction const* const&)
/home/sliedes/scratch/build/clang-triage/llvm.src/include/llvm/Support/Casting.h:112:0
#17 0x1745d52 bool llvm::isa<llvm::TerminatorInst, llvm::Instruction
const*>(llvm::Instruction const* const&)
/home/sliedes/scratch/build/clang-triage/llvm.src/include/llvm/Support/Casting.h:133:0
#18 0x1745d52 llvm::SelectionDAGBuilder::visit(llvm::Instruction const&)
/home/sliedes/scratch/build/clang-triage/llvm.src/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp:969:0
#19 0x1786fc8 llvm::ilist_node<llvm::Instruction>::getNext() const
/home/sliedes/scratch/build/clang-triage/llvm.src/include/llvm/ADT/ilist_node.h:48:42
#20 0x1786fc8
llvm::ilist_nextprev_traits<llvm::Instruction>::getNext(llvm::Instruction
const*)
/home/sliedes/scratch/build/clang-triage/llvm.src/include/llvm/ADT/ilist.h:60:0
#21 0x1786fc8 llvm::ilist_iterator<llvm::Instruction const>::operator++()
/home/sliedes/scratch/build/clang-triage/llvm.src/include/llvm/ADT/ilist.h:219:0
#22 0x1786fc8
llvm::SelectionDAGISel::SelectBasicBlock(llvm::ilist_iterator<llvm::Instruction
const>, llvm::ilist_iterator<llvm::Instruction const>, bool&)
/home/sliedes/scratch/build/clang-triage/llvm.src/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:601:0
#23 0x17866a9 llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function
const&)
/home/sliedes/scratch/build/clang-triage/llvm.src/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1272:15
#24 0x1783574
llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&)
/home/sliedes/scratch/build/clang-triage/llvm.src/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:464:33
#25 0xc887f1 (anonymous
namespace)::X86DAGToDAGISel::runOnMachineFunction(llvm::MachineFunction&)
/home/sliedes/scratch/build/clang-triage/llvm.src/lib/Target/X86/X86ISelDAGToDAG.cpp:168:25
#26 0xf4748c llvm::MachineFunctionPass::runOnFunction(llvm::Function&)
/home/sliedes/scratch/build/clang-triage/llvm.src/lib/CodeGen/MachineFunctionPass.cpp:41:1
#27 0x116c692 llvm::FPPassManager::runOnFunction(llvm::Function&)
/home/sliedes/scratch/build/clang-triage/llvm.src/lib/IR/LegacyPassManager.cpp:1538:23
#28 0x116c8cb llvm::FPPassManager::runOnModule(llvm::Module&)
/home/sliedes/scratch/build/clang-triage/llvm.src/lib/IR/LegacyPassManager.cpp:1558:5
#29 0x116ccd5 (anonymous namespace)::MPPassManager::runOnModule(llvm::Module&)
/home/sliedes/scratch/build/clang-triage/llvm.src/lib/IR/LegacyPassManager.cpp:1616:23
#30 0x116ccd5 llvm::legacy::PassManagerImpl::run(llvm::Module&)
/home/sliedes/scratch/build/clang-triage/llvm.src/lib/IR/LegacyPassManager.cpp:1723:0
#31 0x18301dd (anonymous
namespace)::EmitAssemblyHelper::EmitAssembly(clang::BackendAction,
llvm::raw_ostream*)
/home/sliedes/scratch/build/clang-triage/llvm.src/tools/clang/lib/CodeGen/BackendUtil.cpp:639:3
#32 0x18301dd clang::EmitBackendOutput(clang::DiagnosticsEngine&,
clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions
const&, llvm::StringRef, llvm::Module*, clang::BackendAction,
llvm::raw_ostream*)
/home/sliedes/scratch/build/clang-triage/llvm.src/tools/clang/lib/CodeGen/BackendUtil.cpp:650:0
#33 0x1822df5 clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&)
/home/sliedes/scratch/build/clang-triage/llvm.src/tools/clang/lib/CodeGen/CodeGenAction.cpp:178:7
#34 0x1af6b43 void std::swap<bool>(bool&, bool&)
/usr/lib/gcc/x86_64-linux-gnu/4.9/../../../../include/c++/4.9/bits/move.h:177:7
#35 0x1af6b43 clang::ParseAST(clang::Sema&, bool, bool)
/home/sliedes/scratch/build/clang-triage/llvm.src/tools/clang/lib/Parse/ParseAST.cpp:153:0
#36 0x15c267e clang::FrontendAction::Execute()
/home/sliedes/scratch/build/clang-triage/llvm.src/tools/clang/lib/Frontend/FrontendAction.cpp:443:7
#37 0x1595a0c clang::CompilerInstance::ExecuteAction(clang::FrontendAction&)
/home/sliedes/scratch/build/clang-triage/llvm.src/tools/clang/lib/Frontend/CompilerInstance.cpp:807:7
#38 0x163f8dc clang::ExecuteCompilerInvocation(clang::CompilerInstance*)
/home/sliedes/scratch/build/clang-triage/llvm.src/tools/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp:222:18
#39 0x6dd752 cc1_main(llvm::ArrayRef<char const*>, char const*, void*)
/home/sliedes/scratch/build/clang-triage/llvm.src/tools/clang/tools/driver/cc1_main.cpp:110:13
#40 0x6dc492 ExecuteCC1Tool(llvm::ArrayRef<char const*>, llvm::StringRef)
/home/sliedes/scratch/build/clang-triage/llvm.src/tools/clang/tools/driver/driver.cpp:369:12
#41 0x6dc492 main
/home/sliedes/scratch/build/clang-triage/llvm.src/tools/clang/tools/driver/driver.cpp:415:0
#42 0x7f627b546b45 __libc_start_main
/build/glibc-Y1PEyp/glibc-2.19/csu/libc-start.c:321:0
#43 0x6d992d _start
(/media/ssd_plain/sliedes/build/clang-triage/clang-triage.ninja/bin/clang-3.7+0x6d992d)
Stack dump:
0.    Program arguments:
/media/ssd_plain/sliedes/build/clang-triage/clang-triage.ninja/bin/clang-3.7
-cc1 -triple x86_64-unknown-linux-gnu -emit-obj -mrelax-all -disable-free
-main-file-name - -mrelocation-model static -mthread-model posix
-mdisable-fp-elim -fmath-errno -masm-verbose -mconstructor-aliases
-munwind-tables -fuse-init-array -target-cpu x86-64 -dwarf-column-info
-coverage-file /dev/null -resource-dir
/media/ssd_plain/sliedes/build/clang-triage/clang-triage.ninja/bin/../lib/clang/3.7.0
-internal-isystem /usr/lib/gcc/x86_64-linux-gnu/4.9/../../../../include/c++/4.9
-internal-isystem
/usr/lib/gcc/x86_64-linux-gnu/4.9/../../../../include/x86_64-linux-gnu/c++/4.9
-internal-isystem
/usr/lib/gcc/x86_64-linux-gnu/4.9/../../../../include/x86_64-linux-gnu/c++/4.9
-internal-isystem
/usr/lib/gcc/x86_64-linux-gnu/4.9/../../../../include/c++/4.9/backward
-internal-isystem /usr/local/include -internal-isystem
/media/ssd_plain/sliedes/build/clang-triage/clang-triage.ninja/bin/../lib/clang/3.7.0/include
-internal-externc-isystem /usr/include/x86_64-linux-gnu
-internal-externc-isystem /include -internal-externc-isystem /usr/include
-Werror -std=c++11 -fdeprecated-macro -fdebug-compilation-dir / -ferror-limit 5
-fmessage-length 0 -mstackrealign -fobjc-runtime=gcc -fcxx-exceptions
-fexceptions -fdiagnostics-show-option -o /dev/null -x c++ - 
1.    <eof> parser at end of file
2.    Code generation
3.    Running pass 'Function Pass Manager' on module '-'.
4.    Running pass 'X86 DAG->DAG Instruction Selection' on function '@_Z2f2v'
clang-3.7: error: unable to execute command: Aborted
clang-3.7: error: clang frontend command failed due to signal (use -v to see
invocation)
------------------------------------------------------------


[1] http://sli.dy.fi/~sliedes/clang-triage/triage_report.xhtml#changes

-- 
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20150312/7006699e/attachment.html>


More information about the llvm-bugs mailing list