[llvm-commits] [llvm] r138948 - in /llvm/trunk: lib/MC/MCDisassembler/Disassembler.cpp lib/MC/MCDisassembler/EDDisassembler.cpp lib/Target/ARM/Disassembler/ARMDisassembler.cpp utils/TableGen/DisassemblerEmitter.cpp

David A. Greene greened at obbligato.org
Thu Sep 1 13:36:27 PDT 2011


James Molloy <james.molloy at arm.com> writes:

> Modified: llvm/trunk/lib/MC/MCDisassembler/Disassembler.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCDisassembler/Disassembler.cpp?rev=138948&r1=138947&r2=138948&view=diff
> ==============================================================================
> --- llvm/trunk/lib/MC/MCDisassembler/Disassembler.cpp (original)
> +++ llvm/trunk/lib/MC/MCDisassembler/Disassembler.cpp Thu Sep  1 13:02:14 2011
> @@ -135,18 +135,25 @@
>    MCInst Inst;
>    const MCDisassembler *DisAsm = DC->getDisAsm();
>    MCInstPrinter *IP = DC->getIP();
> -  if (!DisAsm->getInstruction(Inst, Size, MemoryObject, PC, /*REMOVE*/ nulls()))
> +  MCDisassembler::DecodeStatus S;
> +  S = DisAsm->getInstruction(Inst, Size, MemoryObject, PC, /*REMOVE*/ nulls());
> +  switch (S) {
> +  case MCDisassembler::Fail:
> +  case MCDisassembler::SoftFail:
> +    // FIXME: Do something different for soft failure modes?
>      return 0;
> +  case MCDisassembler::Success: {
> +    SmallVector<char, 64> InsnStr;
> +    raw_svector_ostream OS(InsnStr);
> +    IP->printInst(&Inst, OS);
> +    OS.flush();
>  
> -  SmallVector<char, 64> InsnStr;
> -  raw_svector_ostream OS(InsnStr);
> -  IP->printInst(&Inst, OS);
> -  OS.flush();
> +    assert(OutStringSize != 0 && "Output buffer cannot be zero size");
> +    size_t OutputSize = std::min(OutStringSize-1, InsnStr.size());
> +    std::memcpy(OutString, InsnStr.data(), OutputSize);
> +    OutString[OutputSize] = '\0'; // Terminate string.
>  
> -  assert(OutStringSize != 0 && "Output buffer cannot be zero size");
> -  size_t OutputSize = std::min(OutStringSize-1, InsnStr.size());
> -  std::memcpy(OutString, InsnStr.data(), OutputSize);
> -  OutString[OutputSize] = '\0'; // Terminate string.
> -
> -  return Size;
> +    return Size;
> +  }
> +  }
>  }

I'm getting a build error with -Werror:

[sta-dbg]    : [llvm] cc1plus: warnings being treated as errors
[sta-dbg]    : [llvm] /ptmp/dag/llvm/staging/llvm/lib/MC/MCDisassembler/Disassembler.cpp: In function 'size_t LLVMDisasmInstruction(void*, uint8_t*, uint64_t, uint64_t, char*, size_t)':
[sta-dbg]    : [llvm] /ptmp/dag/llvm/staging/llvm/lib/MC/MCDisassembler/Disassembler.cpp:159: error: control reaches end of non-void function
[sta-dbg]    : [llvm] make[3]: *** [/ptmp/dag/build/llvm/staging/debug/lib/MC/MCDisassembler/Debug+Asserts/Disassembler.o] Error 1

Can you fix this?  Thanks.

                             -Dave



More information about the llvm-commits mailing list