[PATCH] D76793: [Matrix] Implement + and - operators for MatrixType.
John McCall via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed May 27 13:36:40 PDT 2020
rjmccall added inline comments.
================
Comment at: clang/lib/Sema/SemaOverload.cpp:8587
+ if (S.Context.hasSameType(M1, M2))
+ AddCandidate(M1, M2);
+
----------------
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.
================
Comment at: clang/lib/Sema/SemaOverload.cpp:8593
+ AddCandidate(cast<MatrixType>(M2)->getElementType(), M2);
}
----------------
Idiomatically, we just copy `QualType` instead of binding references to it.
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