[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

Nick Lewycky nicholas at mxc.ca
Fri Sep 2 09:37:56 PDT 2011


On 09/01/2011 02:52 PM, James Molloy wrote:
> 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.

It's legal to take enum values and bitwise-OR them together to produce a 
result in the type of the enum but not any of the named enum values. GCC 
models this and complains about it (for example, the warning will go 
away if you list each entry in an enum with a power-of-two number of 
entries), while Clang models this sanely and does not complain as long 
as each of the named enum entries is covered.

Nick

>
> 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.
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>




More information about the llvm-commits mailing list