[llvm] r186543 - Add an explicit operator bool conversion to DIDescriptor to make

David Blaikie dblaikie at gmail.com
Wed Jul 17 16:01:23 PDT 2013


On Wed, Jul 17, 2013 at 3:53 PM, Eric Christopher <echristo at gmail.com> wrote:
> Author: echristo
> Date: Wed Jul 17 17:53:05 2013
> New Revision: 186543
>
> URL: http://llvm.org/viewvc/llvm-project?rev=186543&view=rev
> Log:
> Add an explicit operator bool conversion to DIDescriptor to make
> it clear what we want to do. Unfortunately the conversion to
> pointer operator fires now instead and chasing down all of the
> conversions and making them explicit and handled is a large task
> so add a FIXME with it.
>
> Modified:
>     llvm/trunk/include/llvm/DebugInfo.h
>
> Modified: llvm/trunk/include/llvm/DebugInfo.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo.h?rev=186543&r1=186542&r2=186543&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/DebugInfo.h (original)
> +++ llvm/trunk/include/llvm/DebugInfo.h Wed Jul 17 17:53:05 2013
> @@ -102,6 +102,13 @@ namespace llvm {
>      operator MDNode *() const { return const_cast<MDNode*>(DbgNode); }
>      MDNode *operator ->() const { return const_cast<MDNode*>(DbgNode); }
>
> +    // An explicit operator bool so that we can do testing of DI values
> +    // easily.
> +    // FIXME: This operator bool isn't actually protecting anything at the
> +    // moment due to the conversion operator above making DIDescriptor nodes
> +    // implicitly convertable to pointer.

In case it's not clear to the casual reader: DIDescriptor has always
been boolean testable due to the presence of the pointer conversion
above. This is a bit subtle, so we're adding a conversion to bool.
It'd be nice if this was explicit (for the usual reasons that boolean
conversion should be explicit because it's fraught with all sorts of
weird cases where implicit bool could fire), and so it is marked as
such - but then we just get the old behavior of boolean testing via
the pointer conversion.

I'd consider rephrasing the comment to:

"... due to the pointer conversion operator above making DIDescriptor
nodes implicitly convertible to bool."

> +    LLVM_EXPLICIT operator bool() const { return DbgNode != 0; }
> +
>      unsigned getTag() const {
>        return getUnsignedField(0) & ~LLVMDebugVersionMask;
>      }
>
>
> _______________________________________________
> 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