a_sidorin added a comment.

Hello Gabor and Balazs,

> With Balazs, we are working on something similar, but with a different, fine 
> grained error value mechanism. Unfortunately we were not aware of that you 
> have been working on error handling, and we didn't say that we are working on 
> error handling recently, I am terribly sorry about this.

That's a bit disappointing because I was thinking that the status of error 
handling strategy discussion and implementation is reflected in the mailing 
list. But well, let's think what we can do about this.

> From the CSA perspective, we realized that there may be several different 
> error cases which has to be handled differently in `CrossTranslationUnit.cpp`.
>  For example, there are unsupported constructs which we do not support to 
> import (like a struct definition as a parameter of a function).
>  Another example is when there is a name conflict between the decl in the 
> "From" context and the decl in the "To" context, this usually means an ODR 
> error.
>  We have to handle these errors in a different way after we imported one 
> function during CTU analysis.
>  The fact that there may be more than one kind of errors yields for the use 
> of the designated LLVM types: `Error` and `Expected<T>`. A simple `Optional` 
> is probably not generic enough.

Yes, I was thinking about it too. The reason why I chose `Optional` was that 
`ASTImporter` clients don't use the error kind. If you have any plans on 
changing this, `Expected` is a preferred approach.

> I find the `importNonNull` and generally the new family of `import` functions 
> useful, but I am not sure how they could cooperate with `Expected<T>`. 
> Especially, I have some concerns with output parameters.
>  If we have an Expected<T> as a result type, then there is no way to acquire 
> the T if there was an error. However, when we have output parameters, then 
> even if there was an error some output params could have been set ... and 
> those can be reused even after the return. If error handling is not proper on 
> the callee site then we may continue with stale values, which is not possible 
> if we use Expected<T> as a return value.

If I understand you correctly, `importNonNull` and `importNullable` should work 
with `Expected` pretty well. Changing `import*Into` return result to `Error` 
can partially help in avoiding usage of an unchecked result. These functions 
already guarantee that their parameters are changed only if the internal import 
was successful.

> Do you think we can hold back this patch for a few days until Balazs prepares 
> the `Expected<T>` based version? Then I think we could compare the patches 
> and we could merge the best from the two of them.

Sure.


Repository:
  rC Clang

https://reviews.llvm.org/D50672



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to