[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

James Molloy James.Molloy at arm.com
Thu Sep 1 14:52:26 PDT 2011


Hi David,

Fix on the way. The version of GCC I compile with here doesn't spit out any warnings at all; and it shouldn't - it should be able to realise that there are only 3 possible switch enum values and each ends with a return.

Cheers,

James
________________________________________
From: David A. Greene [greened at obbligato.org]
Sent: 01 September 2011 21:36
To: James Molloy
Cc: llvm-commits at cs.uiuc.edu
Subject: Re: [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

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


-- IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium.  Thank you.





More information about the llvm-commits mailing list