[PATCH] Add ErrorOr<>::getOrDie() which uses report_fatal_error instead of assert.

Justin Bogner mail at justinbogner.com
Thu Oct 9 16:23:35 PDT 2014


Rafael EspĂ­ndola <rafael.espindola at gmail.com> writes:
> On 9 October 2014 15:44, Justin Bogner <mail at justinbogner.com> wrote:
>> Alexander Kornienko <alexfh at google.com> writes:
>>> This method allows writing code that consistently fails in case of
>>> dereferencing an ErrorOr<> containing no value rather than crashing in
>>> debug and using uninitialized data in release build.
>>
>> I don't see why this would be better than doing this check in the
>> caller, for two reasons:
>>
>> 1. Situations where report_fatal_error is the right thing are fairly
>>    rare, so I wouldn't expect it to be a lot of boilerplate.
>>
>> 2. The caller generally can and should report a more specific error
>
> I don't thing anyone disagrees that a nice error message is a feature,
> but it might not be the priority of every code to use a SMDiagnostic.
> Using report_fatal_error is a reasonable way to start (or an
> improvement over a misplaced assert/unreachable, like we have in parts
> of LLVM (pr20485 for example)).

To be clear, I was actually just referring to the message that's being
passed to report_fatal_error in the second point.

> Having said that, calling report_fatal_error in a class that is pretty
> independent from llvm looks a bit odd. Could we maybe have something
> like
>
> template<typename T>
> const T& extractOrDie(const ErrorOr<T> &V) {
>   if (V)
>     return *V;
>   report_fatal_error("foo");
> }
>
> defined in some other header?
>
> Cheers,
> Rafael




More information about the llvm-commits mailing list