diff options
author | Nate Begeman <natebegeman@mac.com> | 2009-06-28 19:12:57 +0000 |
---|---|---|
committer | Nate Begeman <natebegeman@mac.com> | 2009-06-28 19:12:57 +0000 |
commit | dde2598cfbaafd71e5d6926f0beb6b77599de28e (patch) | |
tree | 931d4b20d7b4e6ed26e5f00200301f40444eeae5 | |
parent | 49e2e99442f32305b011d1450801462621b8dccc (diff) |
Fix incorrect AST's being produced, noticed by Eli.
The issue this was working around is no longer present in TOT clang.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@74411 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Sema/SemaExpr.cpp | 14 |
1 files changed, 4 insertions, 10 deletions
diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp index 6e11165106..fe284f73b0 100644 --- a/lib/Sema/SemaExpr.cpp +++ b/lib/Sema/SemaExpr.cpp @@ -3623,15 +3623,12 @@ inline QualType Sema::CheckVectorOperands(SourceLocation Loc, Expr *&lex, std::swap(rhsType, lhsType); } - // Handle the case of an ext vector and scalar + // Handle the case of an ext vector and scalar. if (const ExtVectorType *LV = lhsType->getAsExtVectorType()) { QualType EltTy = LV->getElementType(); if (EltTy->isIntegralType() && rhsType->isIntegralType()) { if (Context.getIntegerTypeOrder(EltTy, rhsType) >= 0) { - ImpCastExprToType(rex, EltTy); - rex = new (Context) CStyleCastExpr(lhsType, rex, lhsType, - rex->getSourceRange().getBegin(), - rex->getSourceRange().getEnd()); + ImpCastExprToType(rex, lhsType); if (swapped) std::swap(rex, lex); return lhsType; } @@ -3639,17 +3636,14 @@ inline QualType Sema::CheckVectorOperands(SourceLocation Loc, Expr *&lex, if (EltTy->isRealFloatingType() && rhsType->isScalarType() && rhsType->isRealFloatingType()) { if (Context.getFloatingTypeOrder(EltTy, rhsType) >= 0) { - ImpCastExprToType(rex, EltTy); - rex = new (Context) CStyleCastExpr(lhsType, rex, lhsType, - rex->getSourceRange().getBegin(), - rex->getSourceRange().getEnd()); + ImpCastExprToType(rex, lhsType); if (swapped) std::swap(rex, lex); return lhsType; } } } - // You cannot convert between vector values of different size. + // Vectors of different size or scalar and non-ext-vector are errors. Diag(Loc, diag::err_typecheck_vector_not_convertable) << lex->getType() << rex->getType() << lex->getSourceRange() << rex->getSourceRange(); |