[llvm-dev] [RFC] Should we add isa_or_null<>?

Justin Bogner via llvm-dev llvm-dev at lists.llvm.org
Mon Apr 8 16:15:09 PDT 2019

David Greene via llvm-dev <llvm-dev at lists.llvm.org> writes:
> Bruno Ricci via llvm-dev <llvm-dev at lists.llvm.org> writes:
>> On 07/04/2019 14:13, via llvm-dev wrote:
>>> I have to say `not_null(v)` reads more like an assertion than a
>>> predicate, in which case `isa<T>(not_null(v))` reads like it has the
>>> exact same semantics that `isa<T>(v)` has currently—asserts that `v`
>>> is not null.
>>> I don't dispute that you can *make* it have the desired semantics,
>>> it just won't *look* that way.
>>> maybe `isaT_or_null<Foo>(v)` ? Still looks awkward but maybe less
>>> naively misleading.
>> ... or we keep using "v && isa<T>(v)" (which is not even longer!),
>> which is unambiguous for everyone.  In the rare special case where
>> the pattern "someExpensiveCall() && isa<T>(someExpensiveCall())" is
>> used, just assign the result of "someExpensiveCall()" to a variable.
> +1.

+1. Both "if (v && isa<T>(v)) ..." and "if (dyn_cast_or_null<T>(v)) ..."
are easier to understand than any of the suggested isa_foo_bar options.
Why add another way to accomplish something that already has two ways to
do it?

More information about the llvm-dev mailing list