[LLVMdev] Proposal for better assertions in LLVM

Talin viridia at gmail.com
Mon Aug 8 22:46:33 PDT 2011


So I went ahead and implemented this in my own frontend - I've been using it
for both assertions and conditional debug statements. I like it quite a bit,
and like you say, it compiles down to nothing in non-debug builds.

On Wed, Jul 27, 2011 at 4:00 PM, Chandler Carruth <chandlerc at google.com>wrote:

> On Wed, Jul 27, 2011 at 3:31 PM, Talin <viridia at gmail.com> wrote:
>
>> Can you explain how it avoids evaluating the arguments in the false case?
>> I looked at the code but it's pretty complex.
>>
>
> Essentially it expands to something like:
>
> !(Ty == STy) ? (void)0 : Voidifier() & llvm::dbgs() << ...
>
> where you have something vaguely along the lines of
>
> struct Voidifier {
>   void operator&(raw_ostream &);
> };
>
> The conditional expression ensures that the side-effects of the LHS and RHS
> are contained, while allowing the convenient syntax. The voidifier hack is
> just for types, there are other simple ways to phrase it that boil down to
> the same construct. You could also implement it in LLVM as:
>
> if (!(Ty == STy)) {} else llvm::dbgs()
>
> which works as long as its not used as the lone statement in an unbraced
> else statement.
>
> The existing implementations are much more complex in order to support
> various different constructs. Something like the above would likely serve
> LLVM's needs. Again, I'm happy to provide a very minimal implementation for
> consideration if there is interest, I'm just not sure there is interest.
>



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


More information about the llvm-dev mailing list