[PATCH] D76793: [Matrix] Implement + and - operators for MatrixType.

Florian Hahn via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed May 27 14:43:17 PDT 2020


fhahn marked 2 inline comments as done.
fhahn added inline comments.


================
Comment at: clang/lib/Sema/SemaOverload.cpp:8587
+        if (S.Context.hasSameType(M1, M2))
+          AddCandidate(M1, M2);
+
----------------
rjmccall wrote:
> I don't think this works if one side or the other has e.g. a templated conversion to a matrix type.  You need to add:
> 
> ```
>    (M1, M1) -> M1
>    (M1, M1.ElementType) -> M1
>    (M2, M2) -> M2    // but don't introduce the same candidate twice if the same type is also in the LHS set)
>    (M2.ElementType, M2) -> M2
> ```
> 
> Test case is something like:
> 
> ```
> struct identmatrix_t {
>   template <class T, unsigned N>
>   operator matrix_type<T, N, N>() const {
>     matrix_type<T, N, N> result = {};
>     for (unsigned i = 0; i != N; ++i) result[i][i] = 1;
>     return result;
>   }
> };
> constexpr identmatrix_t identmatrix = identmatrix();
> 
> ...
> m + identmatrix
> ```
> 
> Also, these operator candidates are only for specific operators, right?  I think you can check what the operator is.
Oh I see, I've updated the code to add the versions as suggested.

> Also, these operator candidates are only for specific operators, right? I think you can check what the operator is.

Yes they are. I had to update addGenericBinaryArithmeticOverloads to pass the Op kind.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D76793/new/

https://reviews.llvm.org/D76793





More information about the cfe-commits mailing list