[llvm] r226048 - IR: Move MDLocation into place

Duncan P. N. Exon Smith dexonsmith at apple.com
Wed Jan 14 14:39:11 PST 2015


> On 2015-Jan-14, at 14:35, David Blaikie <dblaikie at gmail.com> wrote:
> 
> 
> Modified: llvm/trunk/include/llvm/IR/DebugInfo.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/DebugInfo.h?rev=226048&r1=226047&r2=226048&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/IR/DebugInfo.h (original)
> +++ llvm/trunk/include/llvm/IR/DebugInfo.h Wed Jan 14 16:27:36 2015
> @@ -877,10 +877,26 @@ class DILocation : public DIDescriptor {
>  public:
>    explicit DILocation(const MDNode *N) : DIDescriptor(N) {}
> 
> -  unsigned getLineNumber() const { return getUnsignedField(0); }
> -  unsigned getColumnNumber() const { return getUnsignedField(1); }
> -  DIScope getScope() const { return getFieldAs<DIScope>(2); }
> -  DILocation getOrigLocation() const { return getFieldAs<DILocation>(3); }
> +  unsigned getLineNumber() const {
> +    if (auto *L = dyn_cast_or_null<MDLocation>(DbgNode))
> 
> What else can this be other than an MDLocation? Should it just be cast_or_null?

*I* think it should be.  I'd actually go further and make this
`cast<MDLocation>` (if `DbgNode` is `nullptr`, this shouldn't be
called at all), but that's obviously a major semantic change.

However, the `DIDescriptor` stuff is very permissive right now
about what's going on underneath.  It never asserts, it just returns
things like `0` and `nullptr`.  `dyn_cast_or_null<>` kept this
initial commit NFC.



More information about the llvm-commits mailing list