[LLVMdev] Proposal for better assertions in LLVM

Chandler Carruth chandlerc at google.com
Wed Jul 27 16:00:29 PDT 2011

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.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20110727/1bd28b99/attachment.html>

More information about the llvm-dev mailing list