From: Nate Begeman Date: Fri, 4 Apr 2008 01:30:25 +0000 (+0000) Subject: Ignore qualifiers when checking vector operands, just like scalar operands. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1330b0e6e4a6ad2d586c4a45d6cece5611829a16;p=clang 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 d4a97c1f8c..1c6044a744 100644 --- a/lib/Sema/SemaExpr.cpp +++ b/lib/Sema/SemaExpr.cpp @@ -1286,10 +1286,13 @@ QualType Sema::InvalidOperands(SourceLocation loc, Expr *&lex, Expr *&rex) { 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,