Ignore qualifiers when checking vector operands, just like scalar operands.
This prevents things like
a += b[0]; where a is a float4 and b is a float4 * (address_space 1)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@49199 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp
index d4a97c1..1c6044a 100644
--- a/lib/Sema/SemaExpr.cpp
+++ b/lib/Sema/SemaExpr.cpp
@@ -1286,10 +1286,13 @@
inline QualType Sema::CheckVectorOperands(SourceLocation loc, Expr *&lex,
Expr *&rex) {
- QualType lhsType = lex->getType(), rhsType = rex->getType();
+ // For conversion purposes, we ignore any qualifiers.
+ // For example, "const float" and "float" are equivalent.
+ QualType lhsType = lex->getType().getCanonicalType().getUnqualifiedType();
+ QualType rhsType = rex->getType().getCanonicalType().getUnqualifiedType();
// make sure the vector types are identical.
- if (lhsType.getCanonicalType() == rhsType.getCanonicalType())
+ if (lhsType == rhsType)
return lhsType;
// if the lhs is an ocu vector and the rhs is a scalar of the same type,