[llvm] r270916 - [Error] Make ECError only constructible via errorCodeToError.

Lang Hames via llvm-commits llvm-commits at lists.llvm.org
Thu May 26 14:40:28 PDT 2016


Hi Dave,

It's necessary I'm afraid. llvm::make_unique is operating under the same
constraint as make_error: ECError's from-std::error_code constructor is now
private. I've left the copy-constructor public though, so this works as is.
Since ECError is a very simple class (just contains a std::error_code) I
expect it should optimize away.

An alternative would be to make this:

  return Error(std::unique_ptr<ECError>(new ECError(EC)));

But that doesn't remove the redundant reference to ECError.

Cheers,
Lang.

On Thu, May 26, 2016 at 2:24 PM, David Blaikie <dblaikie at gmail.com> wrote:

>
>
> On Thu, May 26, 2016 at 2:15 PM, Lang Hames via llvm-commits <
> llvm-commits at lists.llvm.org> wrote:
>
>> Author: lhames
>> Date: Thu May 26 16:15:58 2016
>> New Revision: 270916
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=270916&view=rev
>> Log:
>> [Error] Make ECError only constructible via errorCodeToError.
>>
>> This enforces idiomatic usage of ECError removing the option to construct
>> them
>> using make_error.
>>
>>
>> Modified:
>>     llvm/trunk/include/llvm/Support/Error.h
>>
>> Modified: llvm/trunk/include/llvm/Support/Error.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Error.h?rev=270916&r1=270915&r2=270916&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/include/llvm/Support/Error.h (original)
>> +++ llvm/trunk/include/llvm/Support/Error.h Thu May 26 16:15:58 2016
>> @@ -835,9 +835,8 @@ private:
>>  /// (or Expected) and you want to call code that still returns
>>  /// std::error_codes.
>>  class ECError : public ErrorInfo<ECError> {
>> +  friend Error errorCodeToError(std::error_code);
>>  public:
>> -  ECError() = default;
>> -  ECError(std::error_code EC) : EC(EC) {}
>>    void setErrorCode(std::error_code EC) { this->EC = EC; }
>>    std::error_code convertToErrorCode() const override { return EC; }
>>    void log(raw_ostream &OS) const override { OS << EC.message(); }
>> @@ -846,6 +845,8 @@ public:
>>    static char ID;
>>
>>  protected:
>> +  ECError() = default;
>> +  ECError(std::error_code EC) : EC(EC) {}
>>    std::error_code EC;
>>  };
>>
>> @@ -853,7 +854,7 @@ protected:
>>  inline Error errorCodeToError(std::error_code EC) {
>>    if (!EC)
>>      return Error::success();
>> -  return make_error<ECError>(EC);
>> +  return Error(llvm::make_unique<ECError>(ECError(EC)));
>>
>
> Do you have an extra "ECError" in there? Looks like it should be:
>
>   return Error(llvm::make_unique<ECError>(EC));
>
> ?
>
>
>>  }
>>
>>  /// Helper for converting an ECError to a std::error_code.
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160526/46ecd5d9/attachment.html>


More information about the llvm-commits mailing list