[LLVMdev] Proposal for better assertions in LLVM

Talin viridia at gmail.com
Thu Jul 28 12:07:27 PDT 2011


On Tue, Jul 26, 2011 at 10:59 PM, Chris Lattner <clattner at apple.com> wrote:

>
> On Jul 26, 2011, at 9:17 PM, Talin wrote:
>
> Here's an example of how this would be used: In the constructor for
> ConstantVector, there's an assert:
>
>   assert(C->getType() == T->getElementType() &&
>          "Initializer for vector element doesn't match vector element
> type!");
>
> I would change this to:
>
>   ASSERT_STRM(C->getType() == T->getElementType(),
>     "Initializer for vector element " << I - V.begin() << " with type " <<
>     C->getType() << " doesn't match vector element type " <<
>     T->getElementType());
>
> With more detailed assertions like this, a much larger class of programmer
> errors can be diagnosed without having to go into the debugger.
>
> Because the stream is a raw_ostream, LLVM types and values can easily be
> printed to the stream without having to convert them to string form.
>
>
> I'm unconvinced that this is worth it at all.  This is only going to allow
> you to "avoid going into the debugger" in the most trivial cases.
>
> Question - are you opposed to having a general "assertion with streamed
arguments" facility in llvm/Support at all, or are you merely opposed to the
work involved in replacing the existing assertions en-masse? If it's the
latter, I'll make you a deal - every time I get an assert that I don't think
gives me enough information, I'll send a patch to improve it. But that can
only happen if the general mechanism is in place first. And I'd use that
general mechanism in my own code regardless of whether it's used in LLVM or
not.


> -Chris
>



-- 
-- Talin
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20110728/b254f536/attachment.html>


More information about the llvm-dev mailing list